1

我试图在 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对于一维数组是相同的。这里给出了第 0 行的 arr[0] 和 *arr 地址。但是什么是 arr?为什么不一样?

[我在 Stack Overflow 中检查了其他相关问题,但我没有这些问题,仍然无法解决。]

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

4

1 回答 1

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

尝试访问*(arr+row)for 循环内部是您的段错误的原因。有效索引是从0row-1。我猜你打算使用i而不是row.

*(arr+i)=malloc(sizeof(int)*col);
printf("row: %d",arr[i]);
于 2013-05-31T16:39:28.980 回答