[英]Segmentation fault: Dynamic memory allocation for multidimensional array in C
我尝试在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中检查了其他相关问题,但我没有遇到这些问题,也无法解决这个问题。]
研究这个概念的任何参考或链接都会很棒。
*(arr+row)=malloc(sizeof(int)*col);
printf("row: %d",arr[row]);
试图在for循环中访问*(arr+row)
是你的段错误的原因。 有效索引从0
到row-1
。 我猜你的意思是使用i
而不是row
。
*(arr+i)=malloc(sizeof(int)*col);
printf("row: %d",arr[i]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.