Cのrealloc関数に関する簡単な質問 reallocを使用してポインタが指すメモリブロックを縮小すると、 "余分な"メモリが解放されますか?それとも、手動で何とか解放する必要がありますか?私はreallocを使用して割り当てられたメモリを縮小する
int *myPointer = malloc(100*sizeof(int));
myPointer = realloc(myPointer,50*sizeof(int));
free(myPointer);
行う場合
は例えば、私は、メモリリークを持っていますか?
厳密に言えば、あなたは 'realloc'の結果を記録しておらず、おそらく解放することができないので、メモリリークがあります。しかし、R ..の答えによると、実装の詳細については幸運かもしれません。 –
あなたが正しいですよ。私はそれを修正しようとしました。今はどう? –
新しいコードは、 'realloc'が失敗した場合でも元の割り当てをリークします。ほとんどの実装ではブロックを縮小することはできませんが、それは可能です。ブロックの拡大や縮小を問わずreallocを呼び出す正しい方法は 'void * tmp = realloc(myPointer、50 * sizeof(int));です。 if(!tmp){/ *何とかエラーを処理します。 myPointerはまだ古いブロックを指していますが、まだ割り当てられています* /} myPointer = tmp; '。 –