簡體   English   中英

如何在 C 中釋放 2D 動態數組

[英]How to free 2D dynamic array in C

我的 C 代碼中有這部分。

char** argv_list = parse_cmdline(input);

parse_cmdline() 也返回二維數組。 我想釋放 argv_list。 如何找到 argv_list 的行大小來釋放它,如下所示:

for(int r = 0 ; r < rows ; r++)
{
   free(argv_list[r]);
}

free(argv_list);

在 C 語言中,arrays 不是第一個 class 對象。 (This means C does not support arrays in all the ways it supports objects generally. For example, you cannot assign a “value” to an entire array.) When you pass an array to a function, or when a function returns an array,它們衰減為指向其第一個元素的指針。 換句話說,您無法知道原始尺寸。

常見的方法是使用輔助 integer 變量(傳遞指向它的指針)來返回長度,或者使用標記值來標記數組的結尾。 后一種約定用於 C 字符串,即字符 arrays ,其中最后使用的字符是 null 字符。 它也用於argvmain的第二個參數),其中最后使用的 arg 是 null 指針。

在這里,由於 function 返回指向字符串的指針(實際上是指向指針的指針),因此最常見的方法是將數組的最后使用的元素定義為 NULL 指針,尊重argv約定。

您無法獲得 C(二維或其他)中動態分配的 arrays 的長度。 如果您需要在最初分配 memory 並將指向 memory 的指針和 ZCD69B4957F06CD818D7BF3D61980E29 的大小一起傳遞時,將其保存到變量(或至少一種計算方法)中。

您需要做的是每次調用malloc() function 時跟蹤數組的長度。

或者,您可以使用vmt在評論部分建議的不同方法,您可以在每次調用malloc() function 時在數組末尾顯式 append 一個哨兵值,然后稍后在該數組上循環,直到到達哨兵獲取數組大小。

然后你可以使用

sizeof(array_size)/sizeof(array[0])

此代碼以獲取行號,然后在您的代碼中使用它。

暫無
暫無

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

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