我有一个glibc检测到的问题。我已经研究了解决这个问题的方法,但似乎正确的解决方案是释放我分配的任何东西。但是,即使我这样做,我仍然会在输出屏幕上收到内存映射。
class TestDepth{
gameStatus temp;
public:
TestDepth(gameStatus ¤tGameState)
{
temp = currentGameState;
free(&temp);
}
};
我放置temp=currentGameState
行时只会出现此错误。但是一旦我发表评论,它就可以了。
答案 0 :(得分:5)
正如你所看到的,我有一个glibc检测到的问题。我有研究方法来解决这个问题,但似乎正确的解决方案是释放我分配的任何东西。
你没有分配任何东西。你不应该放任何东西。
答案 1 :(得分:0)
temp = currentGameState;
这将调用gameStatus
的赋值运算符(默认值或您的版本)。如果调用默认赋值运算符,那么就可以进行逐位赋值。如果currentGameState
对象中包含一些堆资源,则这很危险。如果gameStatus
有赋值运算符,希望您已完成所需的深层复制。
无论哪种方式,您都不应该使用free
来释放对象temp
。一个原因是,这不是释放对象的正确方法。另一个原因是这可能会尝试释放未由malloc
分配的内容。
答案 2 :(得分:-1)
你没有释放你认为自由的东西。分配给temp时,您将分配给gameStatus的副本 - 该副本不是来自堆。您没有删除作为参数传入的GameStatus版本,而是删除副本。
将作业分享到temp,然后执行
free( ¤tGameState );