使用双指针动态分配和初始化二维数组

问题描述 投票:0回答:1

我正在尝试动态创建一个 2D 数组(5 行和 2 列)。分配内存时没有任何问题。但是,在将实际值分配给数组时,我收到了分段错误错误。 在调试时,我意识到当 for 循环中的

i
的值为 4

时会弹出错误

即使毫无问题地分配了数组将使用的内存,怎么可能出现分段错误错误?

 #include <stdio.h>
 #include <stdlib.h>
 
 int main(int argc, char *argv[]){
     int **ptr = (int **)malloc(sizeof(int)*5);
     for(int i = 0; i<5; i++){
         ptr[i] = (int *)malloc(sizeof(int)*2);
     }
     
     for(int i = 0; i<5; i++){
         for(int j = 0; j<2; j++){
             ptr[i][j] = i;
         }
     }
     return 0;
 } 
arrays c pointers segmentation-fault double-pointer
1个回答
0
投票

即使毫无问题地分配了数组将使用的内存,怎么可能出现分段错误错误?

代码未正确分配。

避免分配错误。

sizeof(int)*5
OP 代码中的尺寸错误。

  • 所引用对象的大小,而不是类型。

  • 不需要铸造。

  • 更好的代码检查分配失败。

    // int **ptr = (int **)malloc(sizeof(int)*5);
    int **ptr = malloc(sizeof ptr[0] * 5);
    if (ptr == NULL) Handle_OutOfMemory();
© www.soinside.com 2019 - 2024. All rights reserved.