用G++来运行上述程序,会出现错误(由于测试的数据量小,模仿出的错误有所不一样)经过调试发现是realloc函数有问题,重新开辟的空间有些小,改为下述内容就可以了。
s_data = ( Data* ) realloc( s_data, (n+1) * sizeof(Data) );
注意:realloc函数中返回的指针和传递参数的指针s_data需要一致。如果不一致,由于free()函数的内部实现调用了munmap_chunk(),则会报munmap_chunk()的错误,但也可能报其他内存相关的错误。另外,如果malloc分配的指针s_data中途被修改或在其他地方被释放,就成了野指针,这个野指针再传给free()去释放,也会报内存相关的错误。