以下のようにフロート**を解放する正しい方法は何ですか。
例えばfloat ** someArray
for(int i = 0; i < numberOfDimensions; i++)
{
somearray[i] = (float *) malloc(numberOfDimensions * sizeof(float));
}
以下のようにフロート**を解放する正しい方法は何ですか。
例えばfloat ** someArray
for(int i = 0; i < numberOfDimensions; i++)
{
somearray[i] = (float *) malloc(numberOfDimensions * sizeof(float));
}
別のラウンドのメモリをmallocして、元の配列の各floatポインターに割り当てた場合は、事前にそれらも解放する必要があります。
int i;
for (i = 0; i < numberOfDimensions; i++)
free(someArray[i]);
// and free the container array only now
free(someArray);
要素を解放してから、配列を解放することが期待されていると思います。
逆方向に移動します。
for(int i = 0; i < numberOfDimensions; i++)
{
free(somearray[i]);
}
free(somearray);
さて、この場合、あなたは単にfree(someArray)します。ここで、より多くのメモリをmallocしてsomeArrayに追加した場合は、その配列をウォークして各オブジェクトを解放する必要があります。
言い換えれば、あなたが:
for(int i=0; i< whatever; ++i) {
someArray[i] = malloc(...
}
次に、someArrayを解放する前に、もう一度ウォークして解放する必要があります。
単純な1-free()
呼び出し:
free(someArray);
for(int i = 0; i < numberOfDimensions; i++)
{
free(somearray[i]);
somearray[i] = NULL;
}
free(somearray);
somearray=NULL;
(somearray [i] = NULL)この行は各配列要素のリンクを切断し、最後に(somearray = NULL)は配列へのリンクを切断します。これらの2行は動的メモリの配列を解放し、OSはこの解放されたメモリを他のプロセスに割り当てます