首页 > 解决方案 > 为什么 ArrayPointer 给出分段默认值?

问题描述

在我的代码中,当我更改void myFunc(int arrayInput[3][2])为时void myFunc(int **arrayInput),第 5 行出现分段错误,为什么?如何使用数组指针而不是具有固定维度的数组?谢谢!

#include <stdio.h>

const int myArray[3][2] = {{1, 2}, {3, 4}, {5, 6}};

int main2() {
  myFunc(myArray);
  return 0;
}

void myFunc(int arrayInput[3][2]) {

  printf("Line 1: %x\n",arrayInput);
  printf("Line 2: %x\n",arrayInput + 1);
  printf("Line 3: %x\n",*arrayInput);
  printf("Line 4: %x\n",*(arrayInput+1));
  printf("Line 5: %d\n",*(*(arrayInput + 1) + 0));

}

标签: arrayscpointersmultidimensional-arraysegmentation-fault

解决方案


双指针不代表二维数组。您可以尝试做的是像这样动态分配二维数组

#include <stdio.h>
#include <stdlib.h>

void myFunc(int** array);
int main() {
    int** myarray = malloc(3*sizeof(int*));
    for(int x = 0; x < 3;++x){
        myarray[x] = malloc(2*sizeof(int));
    }
    for(int col = 0; col < 3; ++ col){
        for(int row = 0; row < 2; ++row){
            myarray[col][row] = col+row;
        }
    }
    myFunc(myarray);
    
    
    for(int x = 0; x < 3;++x){
        free(myarray[x]);
    }
    free(myarray);
  return 0;
}

void myFunc(int** arrayInput) {

  printf("Line 1: %p\n",arrayInput);
  printf("Line 2: %p\n",arrayInput + 1);
  printf("Line 3: %p\n",*arrayInput);
  printf("Line 4: %p\n",*(arrayInput+1));
  printf("Line 5: %d\n",*(*(arrayInput + 1) + 0));
}

推荐阅读