Arrays Malloc动态数组大小导致分段错误
我的目标是拥有一个数组数组,这样我就可以从另一个变量中获取大小,并在以后的for循环中添加所需的任意多个对象 诸如此类: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
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一样访问它。我已经附加了确切的工作代码。请检查它。。