私のコードについての短い質問があります。私は、テストのための2つの状況または例を作成しました。Cメモリフリーの混乱
例1:
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
free(c);
}
例2:実施例における
char *arr[1000000];
int i = 0;
for (; i < 1000000; i++){
char *c = (char *) calloc(1, sizeof(char) * 10);
arr[i] = c;
free(arr[i]);
arr[i] = NULL;
}
貴様:メモリをfree'ing前に、アレイに置きます。
例1を実行すると、すべてのメモリが解放されます。例2を実行すると、すべてのメモリが解放されるわけではありません。 私は検索して見ましたが、理解できませんでした。
例2の結果が例1と異なるのはなぜですか。
私の常識は、例1と2は同じ結果になるはずですが、実際にはそうではありません。私はメモリの使用状況を調べるためにlinux topを使用します。
と同じになりますすべての記憶を解放しますか? – EricSchaefer
2番目の例はすべてのメモリを解放していないと推測していますか? – Joe
あなたは何を確認しましたか?プロセスのRSS? – wildplasser