【问题标题】:2D array get filled with garbage when passed as a pointer to function当作为指向函数的指针传递时,二维数组会充满垃圾
【发布时间】:2011-01-04 10:23:12
【问题描述】:

我在 main() 函数中声明了这个数组:

int   VISITED[9][9]={{0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0}};

它被传递给一个名为 qneighbor 的函数

qneighbor (5,5,1, 0, &pawn_positions, &PAWNS, WALLH, WALLV, &VISITED);

qneighbor 签名如下:

CELL* qneighbor( int root_row, int root_col, int p, int dist, struct GameTable* PAWN_POSITIONS, int (*PAWNS)[9][9], int WALLH[8][9], int WALLV[9][8], int (*VISITED)[9][9]){...}

但是,在调试时,我看到在第五行之后,在传递给 qneighbor 之后(在执行任何命令之前)立即充满了垃圾。可能出了什么问题?

【问题讨论】:

    标签: c arrays 2d


    【解决方案1】:

    您的代码中似乎没有特别的问题。
    顺便说一句,正如 bcsanches 提到的,qneighbor 的参数 int (*VISITED)[9][9] 是指向int[9][9]的指针。
    为了访问它的元素,VISITED 本身必须被取消引用为 (*VISITED)[ i ][ j ].
    如果你写VISITED[ i ][ j ],它代表一个指针,而不是一个int。
    所以,如果你写 printf( "%d", VISITED[i][j] ) 来确认这个值,它会打印 一个指针值(地址)作为一个 int,它似乎是一个垃圾。

    【讨论】:

      【解决方案2】:

      数组索引超出范围
      保持索引的

      【讨论】:

        【解决方案3】:

        你不需要使用指针来改变数组,数组是通过引用传递的,所以,改为:

        CELL* qneighbor( int root_row, int root_col, int p, int dist, struct GameTable* PAWN_POSITIONS, int PAWNS[9][9], int WALLH[8][9], int WALLV[9][8], int VISITED[9][9]){...}
        

        并使用以下方法调用它:

        qneighbor (5,5,1, 0, &pawn_positions, PAWNS, WALLH, WALLV, VISITED);
        

        在您的代码中,您实际上是在创建一个指针数组...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-03
          • 1970-01-01
          • 2018-01-02
          • 2012-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多