gpt4 book ai didi

c - 删除堆变量给出 munmap_chunk() : invalid pointer error

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:27 36 4
gpt4 key购买 nike

我创建了一个堆变量并分配了一个栈变量地址。并在使用后删除堆变量。所有这些都在一个功能中。我无法理解为什么会出现 munmap_chuck():无效指针错误,尽管我觉得我没有做任何超出范围的事情。

这样做

void heapExample(void)
{
int * intPtr = malloc(sizeof(int));
int val = 92;
intPtr = &val;
printf("Value: %d\n", *intPtr);
free(intPtr);
}

int main()
{
heapExample();
return 0;
}

出现这个错误

Value: 92
*** Error in `./main': munmap_chunk(): invalid pointer: 0xbfbce8e8 ***
======= Backtrace: =========
/usr/lib/libc.so.6(+0x67d2a)[0xb7646d2a]
/usr/lib/libc.so.6(+0x6e9c7)[0xb764d9c7]
/usr/lib/libc.so.6(+0x6f051)[0xb764e051]
./main[0x804857a]
./main[0x80484b1]
/usr/lib/libc.so.6(__libc_start_main+0xf6)[0xb75f7196]
./main[0x80483c1]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:01 6947062 /home/rahul/Documents/c_prac/main
08049000-0804a000 r--p 00000000 08:01 6947062 /home/rahul/Documents/c_prac/main
0804a000-0804b000 rw-p 00001000 08:01 6947062 /home/rahul/Documents/c_prac/main
08814000-08835000 rw-p 00000000 00:00 0 [heap]
b75df000-b7791000 r-xp 00000000 08:01 2495288 /usr/lib/libc-2.24.so
b7791000-b7792000 ---p 001b2000 08:01 2495288 /usr/lib/libc-2.24.so
b7792000-b7794000 r--p 001b2000 08:01 2495288 /usr/lib/libc-2.24.so
b7794000-b7795000 rw-p 001b4000 08:01 2495288 /usr/lib/libc-2.24.so
b7795000-b7798000 rw-p 00000000 00:00 0
b77a2000-b77be000 r-xp 00000000 08:01 2491581 /usr/lib/libgcc_s.so.1
b77be000-b77bf000 r--p 0001b000 08:01 2491581 /usr/lib/libgcc_s.so.1
b77bf000-b77c0000 rw-p 0001c000 08:01 2491581 /usr/lib/libgcc_s.so.1
b77c0000-b77c3000 rw-p 00000000 00:00 0
b77c3000-b77c5000 r--p 00000000 00:00 0 [vvar]
b77c5000-b77c6000 r-xp 00000000 00:00 0 [vdso]
b77c6000-b77e8000 r-xp 00000000 08:01 2495287 /usr/lib/ld-2.24.so
b77e8000-b77e9000 r--p 00021000 08:01 2495287 /usr/lib/ld-2.24.so
b77e9000-b77ea000 rw-p 00022000 08:01 2495287 /usr/lib/ld-2.24.so
bfbb0000-bfbd1000 rw-p 00000000 00:00 0 [stack]
Aborted (core dumped)

最佳答案

你只能传递给free() malloc() 返回的指针/calloc()/realloc() , intPtr不是这样的指针,因为

intPtr = &val;

分配val的地址指向指针。

指针就是指针。你malloc()指向有效内存。您将指针指向程序中的变量地址或堆中的内存,这些内存将由这些 malloc() 中的任何一个返回。/calloc()/realloc() .

当您从堆中请求内存时,您必须通过调用 free() 释放该内存.但是您可以让指针指向具有自动存储持续时间的堆栈变量。当您在代码块中定义变量时,它的作用域是定义它的实际 block 。你可以对它做一个指针,但它会在没有你干预的情况下被释放,当它超出范围时它会自动释放。

拥有指向此类变量的指针意味着您必须小心,不要尝试 free()在您的指针存储其地址的变量超出范围后访问它而不是访问它。

关于c - 删除堆变量给出 munmap_chunk() : invalid pointer error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230892/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com