在C中创建动态3D数组

时间:2016-01-05 15:41:45

标签: c arrays multidimensional-array char

我有以下C代码:

  char buffer[255];
  char ***data = NULL;
  int i = 0;
  int size = 10;

  **data = (char*) calloc(size, sizeof(char**));

  while(fgets(buffer, 255, database)) {
    if(i + 1 >= size) {
      size += 10;
      **data = (char*) realloc(**data, size*sizeof(char**));
    }

    char **line = str_split(buffer, ',', 6);
    **data[i++] = **line;
  }

我是C的菜鸟。我不会后来理解我的代码。但我想要一个3D字符数组(在Java中我说的是一个2D字符串数组)。第一个[]是我的文本文件中的行,'fgets'来自'database'(我不知道有多少行,这就是为什么我想要它动态)。第二个[]和第三个[]填充了str_split的值。

str_split工作正常,那就是代码:

char** str_split(char* str, const char a_delim, int count) {
  char **result;
  char  *token;
  char  *rest = str;
  char  delim[] = { a_delim, '\0' };

  result = (char**) malloc(sizeof(char*) * count);

  int i = 0;
  while((token = strtok_s(rest, delim, &rest))) {
    *(result + i++) = token;
  }

  return result;
}

所以问题是在运行时我收到以下错误:

  

访问冲突写入位置0x00000000。

有什么问题?

1 个答案:

答案 0 :(得分:2)

第一个分配应该如下:

data = (char***) calloc(size, sizeof(char**));

类似于realloc,最后是

data[i++] = line;

问题是您尝试取消引用数据(**data)以为其分配calloc的值,但数据为空以便开始,因此您将获得访问冲突。通常,在引用它之前,应确保指针不为null。