假设我有个函数 foo:
void foo(char ***buff, int size) {
for(int i = 0; i != size; i++){
for(int j = 0; j != size; j++) {
(*buff)[i][j] = 'a';
printf("%c\t", (*buff)[i][j]);
}
printf("\n");
}
}
如果我给它传入一个动态 2d 数组的地址,一切安好:
int main(){
static int size = 3;
char **eg = (char**)malloc(size * sizeof(char*));
if(eg != NULL){
for(int i = 0; i != size; i++){
eg[i] = (char*)malloc(size * sizeof(char));
if(eg[i] == NULL){
for(int j = 0; j != i; j++)
free(eg[j]);
free(eg);
exit(1);
}
}
foo(&eg, size);
}
return 0;
}
但是如果我给它传入一个固定大小的 2d 数组的地址时,就报 seg fault 了:
int main(){
static int size = 3;
char eg2[size][size];
foo(&eg2, size);
return 0;
}
请问哪里出了问题?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.