1.你free的时候确定是malloc出来的指向空间?假设 p =malloc(...); 检查一下是否在free之前对p重新进行了赋值...
2.free的时候,其实malloc出来的空间它的头起部分是写信息的,具体多少个字节我忘了。
我写个伪代码你看一下
void *malloc(size_t size)
{
char * p = 向系统申请空间 head_size +size;
在head_size内写入申请的空间长度信息等。。
return p+head_size;
}
这样free的时候,它根据头信息,自然就知道释放多少了。
具体建议查看一下内存的变化就知道了。
当使用malloc申请内存的时候,系统会在堆中找到足够大的空间分配内存并记录其大小和起始位置
所以调用free()的时候,系统就会根据之前的记录找到并释放掉内存。
如果free()接受的指针不是系统初始分配的地址,如p++;free(p);那么就会报错。
因为系统不记得有以p++这个地址为起始地址分配n个长度的内存。
内存非法操作,建议把要free的空间从分配到释放时相关空间的代码贴出来看下。
或者自己检查下。