0

以下のようにフロート**を解放する正しい方法は何ですか。

例えばfloat ** someArray

for(int i = 0; i < numberOfDimensions; i++)
    {
        somearray[i] = (float *) malloc(numberOfDimensions * sizeof(float));
    }
4

6 に答える 6

4

別のラウンドのメモリをmallocして、元の配列の各floatポインターに割り当てた場合は、事前にそれらも解放する必要があります。

int i;
for (i = 0; i < numberOfDimensions; i++)
    free(someArray[i]);

// and free the container array only now

free(someArray);

P. s.:mallocの戻り値をキャストしないでください。

于 2012-08-07T22:05:16.927 に答える
1

要素を解放してから、配列を解放することが期待されていると思います。

于 2012-08-07T22:08:42.370 に答える
1

逆方向に移動します。

for(int i = 0; i < numberOfDimensions; i++)
{
    free(somearray[i]);
}

free(somearray);
于 2012-08-07T22:10:33.997 に答える
0

さて、この場合、あなたは単にfree(someArray)します。ここで、より多くのメモリをmallocしてsomeArrayに追加した場合は、その配列をウォークして各オブジェクトを解放する必要があります。

言い換えれば、あなたが:

for(int i=0; i< whatever; ++i) {
  someArray[i] = malloc(...
}

次に、someArrayを解放する前に、もう一度ウォークして解放する必要があります。

于 2012-08-07T22:04:15.837 に答える
0

単純な1-free()呼び出し:

free(someArray);
于 2012-08-07T22:04:21.240 に答える
-1
for(int i = 0; i < numberOfDimensions; i++)
{
    free(somearray[i]);
    somearray[i] = NULL;
}

free(somearray);
somearray=NULL;

(somearray [i] = NULL)この行は各配列要素のリンクを切断し、最後に(somearray = NULL)は配列へのリンクを切断します。これらの2行は動的メモリの配列を解放し、OSはこの解放されたメモリを他のプロセスに割り当てます

于 2016-11-07T13:31:08.317 に答える