【问题标题】:Creating a 2D string array in C在 C 中创建二维字符串数组
【发布时间】:2021-04-04 00:41:18
【问题描述】:

所以基本上我试图从一个巨大的文本文件中读取数据,并且需要将数据存储在C 中的2D string 数组中。但我每次都收到 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 字符数组。我在这里做错了吗?

【问题讨论】:

  • 所以从技术上讲,我正在创建一个 3D 字符数组... 不,您正在创建一个指向多个一维指针数组的指针的一维数组char[16]的多个一维数组。

标签: arrays c multidimensional-array segmentation-fault


【解决方案1】:

错误在你的循环中:

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]分配内存。

【讨论】:

    【解决方案2】:

    您需要将some_array[i] = (char **)malloc(X * sizeof(char *)); 的分配从最内层循环移动到外层循环。此外,你should not cast the malloc return value。最终代码:

    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];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 2016-08-10
      • 2015-02-22
      • 2017-07-07
      相关资源
      最近更新 更多