-1

配列に数値を入力し、各数値を出力するだけの簡単なプログラムがあります。

ただし、valgrind は、少なくとも 8000 バイトのメモリがリークしていると主張しています。

int main(int argc, char *argv[])
{
    int numbers[10];
    int i = 0;
    for(i = 0; i < 10; i++)
    {
        numbers[i] = i;
        printf("%d",numbers[i]);
    }
    free(numbers);
    return EXIT_SUCCESS;
}

メモリリークの場所を説明できる人はいますか?

これは、配列に割り当てられたスペースを解放する正しい方法ですか?

4

2 に答える 2

7

メモリリークはなく、未定義の動作があります。割り当てられていないメモリの割り当てを解除しているため、問題が発生しています。

、、、またはfreeで割り当てられたメモリでのみ呼び出す必要があります。他のメモリ位置への呼び出しは未定義の動作です。あなたの場合、は自動メモリ(別名「スタック」)に割り当てられます。このメモリは、スコープ外になるとすぐに自動的に割り当てが解除されます。malloccallocreallocfreenumbers

プログラムを修正する方法は2つあります。

  • 、またはにint numbers[10];置き換えますint *numbers = malloc(10*sizeof(int));
  • 削除するfree(numbers);
于 2013-01-19T20:51:48.197 に答える
1

0123456789メモリ リークをチェックしています...

実際のリーク レポート (実際のリーク: 0 合計サイズ: 0 バイト)

リークの可能性レポート (リークの可能性: 0 合計サイズ: 0 バイト)

実行完了、終了コードは 0

以下、メモリーチェックレポートです。メモリリークはありません。また、メモリを手動で割り当てる場合にのみ free を使用する必要があります。それ以外の場合は、free を使用しないでください。

于 2014-02-07T09:44:50.117 に答える