【问题标题】:Using Malloc and assigning to Arrays between functions使用 Malloc 并在函数之间分配给数组
【发布时间】:2014-03-05 17:13:38
【问题描述】:

我在第 4 行收到此错误,上面写着“初始化程序无效”。我知道错误的含义,但我无法弄清楚为什么我会收到错误。我已经尝试过各种指针和值的组合,但它似乎不想工作。对于代码的任何帮助/反馈将不胜感激。

注意:我计划为棋盘创建一个 2D 数组,这意味着 64 个整数的内存 malloc'd。 printf 是为了让编译器满意,并告诉我在 [4][2] 是否有“0”。

int *newBoard();    
int main(int argc, char *argv[]) {

   int *chessBoard[7][7] = *newBoard();
   printf ("%d", chessBoard[4][2]);

   return EXIT_SUCCESS;
}

int *newBoard() {

   int counter = 0;
   int *blankBoard = malloc(sizeof((int) * TOTALSPACES));

   while (counter < TOTALSPACES) {
      blankBoard[counter] = VACANT;
      counter++;
   }

   return blankBoard;
}

【问题讨论】:

    标签: c arrays function pointers malloc


    【解决方案1】:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define TOTALSPACES 8*8
    #define VACANT '0'
    
    void *newBoard();
    
    int main(int argc, char *argv[]) {
    
        int (*chessBoard)[8][8] = newBoard();
        printf ("%d", (*chessBoard)[4][2]);//48 : '0'
    
        return EXIT_SUCCESS;
    }
    
    void *newBoard() {
        int *blankBoard = malloc(sizeof(int) * TOTALSPACES);
        int counter = 0;
    
        while (counter < TOTALSPACES)
            blankBoard[counter++] = VACANT;
    
        return blankBoard;
    }
    

    【讨论】:

      【解决方案2】:

      int *chessBoard[7][7]代表一个二维数组(7*7),每个元素类型为int*; 但*newBoard() 代表一个 int 元素。

      【讨论】:

        【解决方案3】:

        newBoard 返回一个 TOTALSPACES 整数数组。 int *chessBoard[7][7] = *newBoard(); LHS 是一个 7x7 的 int 指针(不是 int)数组。 RHS是什么,调用返回的一个int指针的内容? (你认为newBoard()前面的*在做什么?

        int *newBoard = newBoard();(使用堆内存)或int newBoard[7][7];(使用堆栈内存)都可以。您正在尝试各做一半!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-26
          相关资源
          最近更新 更多