删除指针时出错(动态内存)

时间:2019-02-28 23:39:13

标签: c++ dynamic-memory-allocation

Segfault when deleting pointer中提出了类似的问题,该错误与内存不是动态分配的事实有关。我的问题略有不同。

我有这个简单的C ++代码:

#include <iostream>
using namespace std;

int main(){

int a =10 ;
int *p=new int ;

p = &a ;

delete p ;

return 0 ;
}

我分配了动态分配的指针p,以指向存储变量a的地址。但是,当我delete p释放堆上的内存时(如我在本教程讲义中所读),我得到一个错误:

   Error in `./test': free(): invalid pointer: 
    0x00007ffd9fad131c ***
    ======= Backtrace: =========
    /lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f331f7877e5]
    /lib/x86_64-linux-gnu/libc.so.6(+0x8037a)[0x7f331f79037a]
    /lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f331f79453c]
    ./test[0x4007f6]
    /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)        [0x7f331f730830]
    ./test[0x4006e9]

请问是什么原因导致了这个问题?

0 个答案:

没有答案