簡體   English   中英

釋放雙指針的正確方法

[英]Correct way to free double pointers

釋放浮點**的正確方法是什么,如下所示。

例如float ** someArray

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

如果您已經分配了另一輪內存並將其分配給原始數組中的每個浮點指針,那么您也應該事先釋放它們:

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

// and free the container array only now

free(someArray);

P. s .: 不要轉換malloc的返回值。

我相信您應該釋放元素,然后釋放數組。

倒退:

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

free(somearray);

好吧,在這種情況下,您只需釋放(someArray)。 現在,如果您分配了更多的內存並將其添加到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)將斷開與數組的鏈接。 這兩行將釋放動態內存數組,並且操作系統將釋放的內存分配給其他進程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM