c - 堆上的多维数组 - C

标签 c arrays pointers multidimensional-array segmentation-fault

我正在学习 C 并尝试编写一个函数来创建一个字符串数组。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


void parse(char ***aoa)
{
char *string = calloc(9, sizeof(char));        //create a string of size 8+1
strcpy(string, "hi world");                   // put text in that array
char **array = calloc(10, sizeof(char *));    //create an array of strings
aoa = calloc(10, sizeof(char *));             //create and array of arrays
aoa[0] = array;                               //assign string array to the 0th elements of new array
array[0] = string;                            //assign our string to 0th element of string carry
printf("%s\n", aoa[0][0]);                    //print 0th element of 0th array. 
}


int main()
{
char ***array = NULL;
parse(array);
printf("%s\n", array[0][0]);
return 1;
}

aoa(数组的数组)在堆上,因此两种方法应该相同。它确实在解析函数中打印了“hi world”,但在 main 中给出了 Segmentation Fault,我的代码有什么问题?

显然我需要 free() 一切并进行错误检查,但我删除它以显示问题的要点

最佳答案

你在parse()中为一个局部变量保留了空间,你需要从main传递一个指向array的指针,然后在里面解引用函数:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void parse(char ****aoa)
{
    char *string = calloc(9, sizeof(char));        //create a string of size 8+1
    strcpy(string, "hi world");                   // put text in that array
    char **array = calloc(10, sizeof(char *));    //create an array of strings
    *aoa = calloc(10, sizeof(char *));             //create and array of arrays
    *(aoa[0]) = array;                               //assign string array to the 0th elements of new array
    array[0] = string;                            //assign our string to 0th element of string carry
    printf("%s\n", *(aoa[0][0]));                    //print 0th element of 0th array. 
}


int main()
{
    char ***array = NULL;
    parse(&array);
    printf("%s\n", array[0][0]);
    return 1;
}

关于c - 堆上的多维数组 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35310798/

相关文章:

c++ - Getline忽略输入的第一个字符

c++ - “is not required” ==未定义行为?

c - 在C中对文件进行排序

c - Apache Camel 和 C 的架构建议

javascript - 从两个数组中返回唯一元素

C - 当未转换为其类型的指针时,数组名称是什么?

c++ - 从指针返回对象时意外的析构函数调用

关闭与关闭套接字?

c - 带有 LEX 和 YACC 的解析器

java - 在java中填充一个二维数组