在C中创建二维字符串数组



因此,基本上我正在尝试从一个巨大的文本文件中读取数据,并需要将数据存储在C中的2Dstring数组中。但我每次都会得到一个segmentation fault

以下是我用来创建数组的代码:

Y = 3
X = 12
char ***some_array=NULL;
some_array = (char ***)malloc(Y * sizeof(char *));
for (int i=0; i<Y; i++)
for (int j=0; j<X; j++){
some_array[i] = (char **)malloc(X * sizeof(char *));
some_array[i][j] = (char *)malloc(16 * sizeof(char));
}

因此,从技术上讲,我正在为这种方式创建一个3D字符数组。我是不是做错了什么?

您需要将some_array[i] = (char **)malloc(X * sizeof(char *));的分配从最内部的循环移动到外部循环。此外,您不应该强制转换malloc返回值。对于最终代码:

Y = 3
X = 12
char ***some_array = NULL;
some_array = malloc(Y * sizeof(char *));
for (int i = 0; i < Y; i++){
some_array[i] = malloc(X * sizeof(char *));
for (int j = 0; j < X; j++){
some_array[i][j] = malloc(16 * sizeof(char));
}
}

或者,您可以创建一个静态分配的数组:

char some_array [X][Y][16];

循环中出现错误:

for (int i=0; i<Y; i++) {
some_array[i] = (char **)malloc(X * sizeof(char *));
for (int j=0; j<X; j++){
some_array[i][j] = (char *)malloc(16 * sizeof(char));
}
}

您应该在内部循环之外为some_array[i]分配内存。

最新更新