#include<stdio.h> #include<stdlib.h> #include<string.h> int main(void) { int *p1=(int*)malloc(10*sizeof(int)); p1++; free(p1); return 0; }
p1移动了4字节,free能否只释放了36个字节?
解决方案
20
p1只移动4个字节,是原因是它是int *
malloc实际占用的空间一定是大于你申请的字节数,原因是在申请的空间周围需要存放内存管理信息以及调试信息
假如只有申请的空间,那么编译器free时又怎么可能知道该释放多少字节呢?
malloc实际占用的空间一定是大于你申请的字节数,原因是在申请的空间周围需要存放内存管理信息以及调试信息
假如只有申请的空间,那么编译器free时又怎么可能知道该释放多少字节呢?
10
你敢随便释放malloc的返回的位置。
明确告诉你,结果是未知的。
明确告诉你,结果是未知的。