0

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

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

        free(&temp);
    }
};

我只在放置temp=currentGameState线路时收到此错误。但是,一旦我将其注释掉,它就可以正常工作。

4

3 回答 3

5

如您所见,我遇到了 glibc 检测到的问题。我研究了一种解决此问题的方法,但似乎正确的解决方案是释放我分配的任何内容。

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

于 2012-06-24T00:18:57.340 回答
0

temp = currentGameState;

这将调用gameStatus' 赋值运算符(默认或您的版本)。如果调用了默认赋值运算符,那么就可以完成一些明智的赋值。如果currentGameState对象中有一些堆资源,这是很危险的。如果有一个赋值运算符gameStatus,希望您已经完成了所需的深层复制。

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

于 2012-06-24T08:01:59.883 回答
-1

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

跳过对 temp 的分配,然后做

free( &currentGameState );
于 2012-06-23T23:59:38.620 回答