getTable
获取存储在其中的2d结构数组和副本int
的内容
它到table
。但是,当我尝试从table
main
中读取任何内容时,我在运行时遇到Segmentation fault
错误。
void getTable(char*s1, char*s2, char**table)
{
/*
SKIP SOME STUFF
*/
table = malloc(sizeof(char*)*(s2Len+1));
for (i = 0 ; i <= s2Len; i++)
table[i] = malloc(sizeof(char)*(s1Len+1));
for (i = 0 ; i <= s2Len; i++)
for (j = 0 ; j <= s1Len; j++)
table[i][j] = '0' + tmpTable[i][j].num;
//prints what table points to correctly
for (i = 0 ; i <= s2Len; i++)
{
printf("\n");
for (j = 0 ; j <= s1Len; j++)
printf("%2c", table[i][j]);
}
printf("\n");
}
int main(void)
{
char ** table; // for number table
/*
SKIP SOME STUFF
*/
// gives error: Segmentation fault (core dumped)
getTable(s1,s2,table);
printf("getTable test\n");
int i, j;
//
for (i = 0 ; i <= strlen(s2); i++)
{
printf("\n");
for (j = 0 ; j <= strlen(s1); j++)
printf("%c ", table[i][j]);
}
return 0;
}
答案 0 :(得分:1)
您修改了子函数(getTable)中的局部变量(表),但是我没有看到您将其传递回调用者的位置。我认为调用者(主)仍在查看其原始值。
如果你将table的main值初始化为NULL,并且在调用函数后使用%p表示table的值的printf,我认为它仍将指向NULL。
答案 1 :(得分:0)
试试这个:
void getTable(char*s1, char*s2, char***pTable)
{
char **table = *pTable;
.... rest of code ...
}
并在主要:
int main(void)
{
char ** table; // for number table
getTable(s1,s2, &table);
... rest of code ...
}
在原始代码中,为table参数分配内存,但main中的本地表没有获取此值,因此您需要将此local的地址传递给您的函数。 另一种方法是让你的getTable函数返回一个**,你可以将它分配给main中的本地表:
char **getTable(char*s1, char*s2)
{
char **table;
.... rest of code ...
return table;
}
int main(void)
{
char **table;
table = getTable(s1,s2);
... rest of code ...
}