将 C 中 char 指针动态数组的最后一个值设置为 NULL 以终止 while 循环?

Set the last value of a dynamic array of char pointers in C to NULL for while loop termination?

根据下面的代码我有几个问题。

  1. 在这个动态的 char 指针数组的末尾使用 NULL 标记值是否是正确的方法?如果不是我该怎么办?
  2. 下面的代码是否会因为我将 malloced 内存设置为 NULL 而导致内存泄漏?

我的一般问题是。

  1. 我该怎么做才能拥有一个动态字符指针数组,最后一个值为 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 存储在 malloced 内存中,没有将对内存的任何引用设置为 NULL,因此没有内存泄漏。 malloc 返回的所有指针都是 freed.