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

时间:2013-05-31 16:36:03

标签: c multidimensional-array dynamic-memory-allocation

我试图在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中检查了其他相关问题,但我没有遇到这些问题,但仍无法解决这个问题。]

研究这个概念的任何参考或链接都会很棒。

1 个答案:

答案 0 :(得分:3)

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

尝试访问for循环中的*(arr+row)是导致segfault的原因。有效索引从0row-1。我猜你的意思是使用i而不是row

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