首页 > 解决方案 > 处理结构内的可变字符串数组 (C)

问题描述

我必须知道是否有一种方法可以在结构内部声明一个可变长度的字符串数组,就像这样

struct node {
               int k;
               char * arr[length_variable];
            }

现在我正在做类似的事情

 struct node {
                  int k;
                  char ** arr;
                 }

int main()
{
  ...
  struct node * n = (struct node*)malloc(sizeof(struct node));
  n->arr = malloc(sizeof(char*)*length_of_first_array); //the length of the array is variable
  n->arr[0] = malloc(sizeof(char)*length_first_string+1); //+1 is for \0 character
  strcpy(n->arr[0],"word");
  ...
}

不幸的是,使用 valgrind 工具“内存检查”分析输出代码,我的 malloc 似乎有问题。

标签: arrayscstruct

解决方案


VLA 不能是结构或联合类型的成员:

6.7.2.1 结构和联合说明符
...
9 结构或联合的成员可以具有除可变修改类型之外的任何完整对象类型。123) ...
123) 结构或联合不能包含具有可变修改类型的成员,因为成员名称不是 6.2.3 中定义的普通标识符。
C 2011 在线草案

就分配而言,您发布的代码是正确的 - 完成后您是否正确地释放了该内存?你必须确保你free每个人都在你n->arr[i] 之前free n->arr,而且你必须在你free n->arr之前。freen


推荐阅读