2015-10-19 66 views
2

我在我的应用程序中获得segmentation fault,并且在使用示例应用程序进行测试时,发现该对象引用释放它之后不会导致分段错误。下面是测试代码,我跑,为什么没有segfault错误时免费重新对象?

hash_node *node_obj=new hash_node(); 
delete node_obj; 
node_obj->var1=0; 
return 0; 

我只是重载new使用mallocdelete使用free。 任何人都可以在这里告诉我吗?

回答

2

使用已被删除/释放的指针访问内存中的位置是未定义的行为。未定义的行为并不意味着会发生段错误。

0

这是一个未定义的行为,所以你不能指望在这里出现分段错误。您可以参考Stroustrup的“C++的设计和演变”,其中提到:

初始化后无法更改引用所引用的内容。也就是说,一旦C++引用被初始化,它就不能被 指向一个不同的对象;它不能被重新绑定。根据rg2的类型,其中r1 = r2可以通过r1分配给所参考的对象或向r1分配新的 参考值(重新绑定r1)。我想在C++中避免出现这样的问题。

0

当进程试图访问它不认为的内存位置时,会发生分段错误。分配给进程的区域之外的内存。


在您的代码中,访问已释放的内存是未定义的行为。

相关问题