我试图在C中动态创建一个多维数组但是我遇到了分段错误!
int **arr=malloc(sizeof(int*) *row);
printf("&ar:r%d arr:%d %d\n\n",*arr,arr,arr[0]);
for(i=0;i<row;i++){
*(arr+i)=malloc(sizeof(int)*col);
printf("row: %d",arr[i]);
}
printf("\nbase arr: %d",&arr[0][0]);
我检查了行的地址并根据列中的总元素的需要分配了内存。但是当我访问它时arr[i][j]
它会显示不同的地址 [这就是为什么sigsegv]。
for(i=0;i<row;i++){
for(j=0;j<col;j++){
arr[i][j]=0; //this point
}
puts("done");
}
AFAIK,somearr
和&somearr
对于1维数组是相同的。
这里给出了第0行的arr [0]和* arr地址但是什么是arr?为什么会有所不同?
[我在Stack Overflow中检查了其他相关问题,但我没有遇到这些问题,但仍无法解决这个问题。]
研究这个概念的任何参考或链接都会很棒。
答案 0 :(得分:3)
*(arr+row)=malloc(sizeof(int)*col);
printf("row: %d",arr[row]);
尝试访问for循环中的*(arr+row)
是导致segfault的原因。有效索引从0
到row-1
。我猜你的意思是使用i
而不是row
。
*(arr+i)=malloc(sizeof(int)*col);
printf("row: %d",arr[i]);