我尝试编译以下代码:
#include <stdio.h>
void main()
{
int *p = (int*) malloc(4*sizeof(int));
p++;
p++;
free(p);
}
但它给了我以下错误。
* `/home/a.out' 中的错误:free():无效指针:0x0000000001d04018 *
中止。
我认为我仍然在 4 整数大小的分配限制内。但是为什么指针无效。有人可以帮忙吗。
最佳答案
您正在调用未定义的行为。
来自 free manual :
The free() function frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc() or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behavior occurs.
您是否在分配区域内并不重要。该指针必须与之前分配的指针相同。
未定义的基本原理是典型的实现(这是实现定义的)必须记住与分配相关的其他元数据,例如分配大小,在某些数据结构中以便以后释放它们。如果 ptr
与分配函数返回的不同,则无法在释放期间查找此数据结构以获取这些元数据。
关于c - 免费导致错误 : free(): invalid pointer: 0x0000000001d04018,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50094589/