繁体   English   中英

分段错误:C中多维数组的动态内存分配

[英]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)是你的段错误的原因。 有效索引从0row-1 我猜你的意思是使用i而不是row

*(arr+i)=malloc(sizeof(int)*col);
printf("row: %d",arr[i]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM