我遇到了检测到glibc的问题。我已经研究了一种解决此问题的方法,但是似乎正确的解决方案是释放我分配的任何内容。但是,即使我这样做,我仍然会在输出屏幕上收到内存映射打印。
class TestDepth{
gameStatus temp;
public:
TestDepth(gameStatus ¤tGameState)
{
temp = currentGameState;
free(&temp);
}
};
我只在放置temp=currentGameState
行时收到此错误。但是一旦我把它注释掉,它就可以正常工作。
如您所见,我遇到了检测到 glibc 的问题。我研究了一种方法来解决这个问题,但是似乎正确的解决方案是释放我分配的任何内容。
你没有分配任何东西。你不应该释放任何东西。
temp = currentGameState;
这将调用gameStatus
的赋值运算符(默认或您的版本)。如果调用默认赋值运算符,则按位赋值将完成。如果对象currentGameState
有一些堆资源,这是危险的。如果有 gameStatus
的赋值运算符,希望您已经完成了所需的深度复制。
无论哪种方式,您都不应该使用 free
来释放对象temp
。一个原因是这不是释放对象的正确方法。另一个原因是这可能会尝试释放未由malloc
分配的内容。
你没有释放你认为你在释放的东西。当您分配给临时时,您将分配给游戏状态的副本 - 该副本不是来自堆。您不会删除作为参数传入的 GameStatus 版本,而是删除副本。
跳过临时作业,只做
free( ¤tGameState );