【问题标题】:Segmentation fault: Dynamic memory allocation for multidimensional array in C分段错误:C 中多维数组的动态内存分配
【发布时间】:2013-05-27 13:14:45
【问题描述】:

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

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

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

【问题讨论】:

  • 你在哪里得到段错误?你能发布你从这段代码中得到的控制台输出吗?

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


【解决方案1】:
*(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]);

【讨论】:

  • 什么是arr?它与 &arr[0][0] 或 arr[0] 有什么不同?
猜你喜欢
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
  • 2020-08-08
相关资源
最近更新 更多