为什么这一系列指针操作会导致错误?
Why does this sequence of pointer operations cause an error?
为什么下面的(公认的深奥的)指针操作会导致以下错误:
*** Error in /home/ubuntu/workspace/Project 3/Debug/Project 3': double free or corruption (out): 0x00007fffffffd7c0 ***
int *intPointer = malloc(sizeof(int));
*intPointer = 1;
int intArray[] = { *intPointer };
int *intPointer2 = &intArray[0];
free(intPointer2);
分配给 intPointer2
的值是指向 intArray
中第一个元素的指针。这个数组是在堆栈上分配的,所以试图 free
它是 undefined behavior。
您只能 free
由 malloc
/realloc
/calloc
返回的内存。该数组中的第一个(也是唯一一个)元素包含 intPointer
指向的值的副本(不是 intPointer
的值的副本) 没关系。
只有调用 free(intPointer)
才有效。
您正在将 &intArray[0]
传递给 free
,但您并未从 malloc
获取它,因此行为未定义。
为什么下面的(公认的深奥的)指针操作会导致以下错误:
*** Error in /home/ubuntu/workspace/Project 3/Debug/Project 3': double free or corruption (out): 0x00007fffffffd7c0 ***
int *intPointer = malloc(sizeof(int));
*intPointer = 1;
int intArray[] = { *intPointer };
int *intPointer2 = &intArray[0];
free(intPointer2);
分配给 intPointer2
的值是指向 intArray
中第一个元素的指针。这个数组是在堆栈上分配的,所以试图 free
它是 undefined behavior。
您只能 free
由 malloc
/realloc
/calloc
返回的内存。该数组中的第一个(也是唯一一个)元素包含 intPointer
指向的值的副本(不是 intPointer
的值的副本) 没关系。
只有调用 free(intPointer)
才有效。
您正在将 &intArray[0]
传递给 free
,但您并未从 malloc
获取它,因此行为未定义。