[英]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 字符。 它也用于argv
( main
的第二个参数),其中最后使用的 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.