在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]
请问是什么原因导致了这个问题?