我在我的应用程序中得到segmentation fault
,并且在使用示例应用程序进行测试时,我发现在释放它之后的对象引用不会导致分段错误。下面是我运行的测试代码,
hash_node *node_obj=new hash_node();
delete node_obj;
node_obj->var1=0;
return 0;
我刚刚超载new
以使用malloc
和delete
来使用free
。
有人可以告诉我吗?
答案 0 :(得分:3)
使用已删除/释放的指针访问内存中的位置是未定义的行为。未定义的行为并不意味着会发生段错误。
答案 1 :(得分:0)
这是一种未定义的行为,因此您不能指望此处出现分段错误。你可以参考Stroustrup的“C ++的设计和演变”,其中说:
无法更改参考引用的内容 初始化。也就是说,一旦C ++引用被初始化,它就不能 以后可以提到另一个对象;它无法重新绑定。一世 过去曾被Algol68引用咬过,其中r1 = r2可以 要么通过r1分配给所引用的对象,要么分配一个新对象 参考值为r1(重新绑定r1),具体取决于r2的类型。一世 想避免在C ++中出现这样的问题。
答案 2 :(得分:0)
当进程尝试访问其未设想的内存位置时,会发生分段错误。分配给该过程的区域外的内存。
<小时/> 在您的代码中,访问已释放的内存是Undefined Behavior。