c - 免费导致错误 : free(): invalid pointer: 0x0000000001d04018

标签 c pointers

我尝试编译以下代码:

#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/

相关文章:

c - 如何优化公式?

c - 二叉树递归搜索c代码[不是二叉搜索树]

java - "Exception in thread "主要 "java.lang.NullPointerException"

c++ - 如何使用指向指针的指针存储 Polyomino 的对称性?

C 编程。将字符串 www.as.com 转换为 3www2as3com0

c - 二维数组程序的输出

c - 使用 NAG 数学库重新分发应用程序 - 客户端必须有许可证?

c - OpenMP:如何指定任务执行的频率

c - 取消引用多维数组名称和指针算法

pointers - 为什么 `std::ptr::null`无法用于未定义大小的类型?