main(例:mymalloc())以外の関数内で割り当てられたメモリを解放する方法をお勧めしますか?プログラムのさまざまな機能を無料で呼び出すことはできますか?あるいは、私たちはmyalloc()にメモリを割り当てたので、myalloc()自体の中でメモリを解放する必要がありますか? 以下を実装するより良い方法があるかどうかをご提案ください。mallocとフリーラッパーの使用
int main(int argc, char ** argv) {
int * arr = {0};
foo();
return 1;
}
void mymalloc(int ** myarr1) {
(*myarr1) = (int*) malloc(sizeof(int)*25);
(*myarr1)[3] = 69;
}
void myfree(int ** myarr2) {
if (*myarr2) {
memset(*myarr2, 0, sizeof(int)*25);
free(*myarr2);
}
void foo() {
int * arr1 = {0};
mymalloc(&arr1);
printf("car[3]=%d\n",arr1[3]);
myfree (&arr1);
// Check if memory was freed
if (arr1) {
printf("ERROR: Memory allocated to arr1 is not freed.");
exit (1);
}
}
出力:
ERROR:ARR1に割り当てられたメモリが解放されません。
'test.cの:20:エラー:宣言されていない'(最初にこの関数で使用)「ARR」。 – ulidtko
@ulidtko:ありがとう。今修正されました。私は何をしようとしているのかを知るためにコードを入力しました。 – MemoryLeak
ところで、あなたが安全なコードを書いていない限り、 'free'を使う前にメモリをクリアする必要はありません。 –