关于g ++生成代码的问题

时间:2008-11-25 11:00:26

标签: debugging g++

亲爱的g ++黑客,我有以下问题。

当一个对象的某些数据被错误的程序覆盖时,为什么程序最终会因双重自由错误而破坏该对象而失败?如何知道数据是否已损坏?为什么它会导致双重免费?

1 个答案:

答案 0 :(得分:3)

通常不是对象的内存被覆盖,而是对象外部的某些内存。如果这会触及malloc的控制结构,那么一旦它访问它们并且试图根据损坏的结构做出奇怪的事情,free就会吓坏。

如果你真的只用愚蠢的东西覆盖对象内存,那么malloc / free就无法知道。您的程序可能会崩溃,但出于其他原因。

看看valgrind。它是一个模拟CPU并监视每个内存访问异常的工具(比如试图覆盖malloc的控制结构)。它非常容易使用,大多数情况下你只需在shell上添加valgrind就可以在valgrind中启动程序,它可以为你节省很多痛苦。

关于C ++:总是确保你将new与remove一起使用,并将new []与delete []结合使用。切勿混淆它们。糟糕的事情会发生,通常与你所描述的相似(但是valgrind会警告你)。