在C中创建动态三维阵列

在C中创建动态三维阵列,c,arrays,multidimensional-array,char,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(*

我有以下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”读取文本文件中的行(我不知道有多少行,这就是为什么我希望它是动态的)。第二个[]和第三个[]用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


怎么了?

第一个alloc应该是这样的:

data = (char***) calloc(size, sizeof(char**));
realloc和finally类似

data[i++] = line;

问题是您试图取消引用数据(
**data
)以将calloc的值分配给它,但数据一开始是空的,因此您会遇到访问冲突。一般来说,在执行指针之前,您应该确保它不为空。

1)
**data=(char*)calloc(size,sizeof(char**))-->
data=(char***)calloc(size,sizeof(char**))“我没有真正理解我的代码”:那你是怎么写的?这个错误发生在哪里?“我几乎不懂我的代码”好吧,这很令人沮丧。你怎么能指望别人理解呢?@BLUEPIXY你有什么“2”字吗?@EugeneSh。是的,1,2,3。。。