rno*_*ris 2 c++ pointers segmentation-fault
我在运行一些C++代码时遇到了段错误.我已将问题隔离到程序中删除指针的行.这是一个产生相同错误的简单示例:
int main()
{
int* pointer=0;
int number = 3;
pointer = &number;
delete pointer;//This line causes a segmentation fault
pointer=0;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
稍作修改就会生成符合预期的代码:
int main()
{
int* pointer=new int(3);
delete pointer;//This line now works
pointer=0;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么第一个导致段错误而第二个没有?我知道指针不是无效的,因为它已被赋值给数字变量的地址.
Cha*_*had 18
你应该只有delete已经分配的内存new.在堆栈上声明的自动变量不需要是deleted.通常,始终匹配内存分配和释放类型:
new应该被释放delete.new []应该被释放delete [].malloc()应该被释放free().segfault是因为delete操作符将尝试将该内存放回堆中,并且依赖于内存的某些属性,这些属性不适用于堆栈上不是来自堆的自动内存.