Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Malloc动态数组大小导致分段错误_Arrays_C_Malloc - Fatal编程技术网

Arrays Malloc动态数组大小导致分段错误

Arrays Malloc动态数组大小导致分段错误,arrays,c,malloc,Arrays,C,Malloc,我的目标是拥有一个数组数组,这样我就可以从另一个变量中获取大小,并在以后的for循环中添加所需的任意多个对象 诸如此类: char*测试[3][1][3]={ {“FOO”,“BAR”}, {“BIZ”,“NIZ”}, {“BIZ”、“NIZ”、“NAZ”} }; printf(“\n测试:\n”); printf(“测试:%s\n”,测试[0][0][0]); printf(“测试:%s\n”,测试[0][0][1]); //这是唯一的动态值,其余的是正在插入的键值对 //像FOO:BAR

我的目标是拥有一个数组数组,这样我就可以从另一个变量中获取大小,并在以后的for循环中添加所需的任意多个对象

诸如此类:

char*测试[3][1][3]={
{“FOO”,“BAR”},
{“BIZ”,“NIZ”},
{“BIZ”、“NIZ”、“NAZ”}
};
printf(“\n测试:\n”);
printf(“测试:%s\n”,测试[0][0][0]);
printf(“测试:%s\n”,测试[0][0][1]);
//这是唯一的动态值,其余的是正在插入的键值对
//像FOO:BAR
//此函数返回一个整数
int数组_size=someotherfunction();
字符**人=(字符**)malloc(数组大小);
对于(i=0;i
现在您有了4D字符数组。以下代码对于您的数据已经足够了。如果维度的大小为1,则没有额外维度

    char *test[3][3] = {
        {"FOO", "BAR"},
        {"BIZ", "NIZ"},
        {"BIZ", "NIZ", "NAZ"}
    };
printf("TEST: %s\n", test[0][0]);
printf("TEST: %s\n", test[0][1]);
编辑:

以下内容适用于
char*测试[NumElement]
。类似地,您可以为3d阵列实现

char **test = malloc(sizeof(char*) * NumElement);
for (i = 0; i < NumElement; i++)
{
    test[i] = malloc((STR_Length+1)* sizeof(char));  //for "FOO" STR_Length is 3, +1 for null char
}
char**test=malloc(sizeof(char*)*NumElement);
对于(i=0;i
编辑2:精确代码

int N = 3, M = 3, STRLEN=3;
char *** test = (char *** )malloc(N * sizeof(char ** )) ;  //equal to char * test[N][M]
for(int i = 0 ; i < N ; i++ ) //Allocate memroy for each row
{ 
    test[i] = (char ** ) malloc(M * sizeof(char * )) ;
    for ( int j = 0 ; j < M ; j++ )
    { 
        test[i][j] = (char *) malloc ((STRLEN+1) * sizeof(char));
    }
 }
 test[0][0] = "FOO";
 test[0][1] = "BAR" ;
 printf("%s\n",test[0][0]);
 printf("%s\n",test[0][1]);
int N=3,M=3,STRLEN=3;
字符***测试=(字符***)malloc(N*sizeof(字符**))//等于字符*测试[N][M]
for(int i=0;i
someotherfunction
做什么?它的回报是什么?请记住,分配的是字节数量,而不是“元素”数量。要为两个
char*
分配空间,您必须使用
2*sizeof(char*)
以字节为单位获取大小。此外,
people[0][0][0]=“FOO”
没有意义,编译器不是为此向您发出警告吗?更不用说指针
people[0][0}
不会指向任何地方。你有一个“2D”指针数组,而不是“3D”数组。记住
malloc
只分配内存,它不会以任何方式初始化它。如果每次“我知道的部分很好”我都有一美元是问题吗…我觉得你应该用
-Wall
或类似的工具来编译…啊,我不知道。我还不清楚如何使用malloc来编译though@user3505901请检查编辑的答案,如果它对您有帮助的话。对不起,我仍然不知道如何从测试开始[I]作为一个字符数组到一个字符数组数组,因为我希望能够像test[I][0]=“FOO”和test[I][1]=“BAR”@user3505901一样访问它。我已经附加了确切的工作代码。请检查它。。