将 C 中 char 指针动态数组的最后一个值设置为 NULL 以终止 while 循环?
Set the last value of a dynamic array of char pointers in C to NULL for while loop termination?
根据下面的代码我有几个问题。
- 在这个动态的 char 指针数组的末尾使用 NULL 标记值是否是正确的方法?如果不是我该怎么办?
- 下面的代码是否会因为我将 malloced 内存设置为 NULL 而导致内存泄漏?
我的一般问题是。
- 我该怎么做才能拥有一个动态字符指针数组,最后一个值为 NULL,这样我就可以在那个点停止循环,而无需计算动态数组中有多少元素字符指针。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
char **array_strings = NULL;
array_strings = malloc(sizeof(char *) * 2);
array_strings[0] = malloc(sizeof(char) * 5);
strcpy(array_strings[0],"test");
array_strings[1]=NULL;
while (array_strings[i] != NULL)
{
printf("array_strings[%d]: %s", i, array_strings[i]);
i++;
}
free(array_strings[0]);
free(array_strings[1]);
free(array_strings);
return 0;
}
Would this be the correct way to have a sentinel value of NULL at the end of this dynamic array of char pointers? If not what could I do?
这是正确的。您有一个 char
指针的动态数组,最后一个指针设置为 NULL
。那里没有错误。
Will the code below cause a memory leak because I am setting malloced memory to NULL
您将 NULL
存储在 malloc
ed 内存中,没有将对内存的任何引用设置为 NULL
,因此没有内存泄漏。 malloc
返回的所有指针都是 free
d.
根据下面的代码我有几个问题。
- 在这个动态的 char 指针数组的末尾使用 NULL 标记值是否是正确的方法?如果不是我该怎么办?
- 下面的代码是否会因为我将 malloced 内存设置为 NULL 而导致内存泄漏?
我的一般问题是。
- 我该怎么做才能拥有一个动态字符指针数组,最后一个值为 NULL,这样我就可以在那个点停止循环,而无需计算动态数组中有多少元素字符指针。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
char **array_strings = NULL;
array_strings = malloc(sizeof(char *) * 2);
array_strings[0] = malloc(sizeof(char) * 5);
strcpy(array_strings[0],"test");
array_strings[1]=NULL;
while (array_strings[i] != NULL)
{
printf("array_strings[%d]: %s", i, array_strings[i]);
i++;
}
free(array_strings[0]);
free(array_strings[1]);
free(array_strings);
return 0;
}
Would this be the correct way to have a sentinel value of NULL at the end of this dynamic array of char pointers? If not what could I do?
这是正确的。您有一个 char
指针的动态数组,最后一个指针设置为 NULL
。那里没有错误。
Will the code below cause a memory leak because I am setting malloced memory to NULL
您将 NULL
存储在 malloc
ed 内存中,没有将对内存的任何引用设置为 NULL
,因此没有内存泄漏。 malloc
返回的所有指针都是 free
d.