#include<stdio.h>
#include<stdlib.h>
int main(){
int * ptr = (int*)malloc(sizeof(int)*100); // allocated space for 100 integers
//some code
free(ptr);<-calling free with ptr as argument
return 0;
}
我知道我的问题听起来很傻但是,
我想问一下,如何释放所有 400 个字节(在我的例子中),因为 ptr 只包含内存中一个字节的地址,而且我没有传递任何其他指定动态数组大小的参数,以便它可能会运行一个循环并释放所有字节。
如果我这样做:
ptr++;
free(ptr);
然后会发生什么。
我正在学习指针并有这个疑问。
malloc
/free
例程的一部分包括存储元数据,例如内存块有多大free()
。通常,此数据存储在 malloc()
返回的指针之前的字节处。阅读更多这里.
由于指针的增量值不是之前由
malloc()
、calloc()
或 realloc()
返回的值,因此代码 ptr++; free(ptr);
其中 ptr
由 malloc()
返回调用未定义的行为。 free()
可能会尝试访问簿记数据,这些数据被假定为距分配块开始处的固定偏移量,但发现垃圾反而会剧烈崩溃。或者也许会发生完全不同的事情。您无法可靠地预测调用未定义行为时会发生什么。