可能重复:
C编程:free如何知道要释放多少内存?
在C语言中,我经常使用malloc()
来分配内存并使用free()
释放它:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);
free()
如何知道要释放多少内存?malloc()
是否在某个地方创建了一个表来记住指针以及每个指针所指向的内存大小?如果是这样,那么如果我重命名指针,free()
会失败吗?例如:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/
如果我增加指针地址并运行free()
,会发生什么?例如:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/
它会在原始数组的末尾之外再释放一块额外的内存吗?