glibc检测到双重免费或腐败

时间:2012-06-23 23:52:44

标签: c++ glibc

我有一个glibc检测到的问题。我已经研究了解决这个问题的方法,但似乎正确的解决方案是释放我分配的任何东西。但是,即使我这样做,我仍然会在输出屏幕上收到内存映射。

class TestDepth{
    gameStatus temp;
public:
    TestDepth(gameStatus &currentGameState)
    {
        temp = currentGameState;

        free(&temp);
    }
};

我放置temp=currentGameState行时只会出现此错误。但是一旦我发表评论,它就可以了。

3 个答案:

答案 0 :(得分:5)

  

正如你所看到的,我有一个glibc检测到的问题。我有研究方法来解决这个问题,但似乎正确的解决方案是释放我分配的任何东西。

你没有分配任何东西。你不应该放任何东西。

答案 1 :(得分:0)

temp = currentGameState;

这将调用gameStatus的赋值运算符(默认值或您的版本)。如果调用默认赋值运算符,那么就可以进行逐位赋值。如果currentGameState对象中包含一些堆资源,则这很危险。如果gameStatus有赋值运算符,希望您已完成所需的深层复制。

无论哪种方式,您都不应该使用free来释放对象temp。一个原因是,这不是释放对象的正确方法。另一个原因是这可能会尝试释放未由malloc分配的内容。

答案 2 :(得分:-1)

你没有释放你认为自由的东西。分配给temp时,您将分配给gameStatus的副本 - 该副本不是来自堆。您没有删除作为参数传入的GameStatus版本,而是删除副本。

将作业分享到temp,然后执行

free( &currentGameState );