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。理由の 1 つは、オブジェクトを解放する正しい方法ではないことです。もう 1 つの理由は、 によって割り当てられていないものを解放しようとする可能性があることmallocです。

于 2012-06-24T08:01:59.883 に答える
-1

あなたは、自分が解放していると思っているものを解放しているのではありません。temp に割り当てると、ヒープからのものではない gameStatus のコピーに割り当てられます。引数として渡された GameStatus のバージョンを削除するのではなく、コピーを削除しています。

一時への割り当てをスキップして、そのまま実行します

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