使用Malloc并在函数之间分配Arrays

时间:2014-02-08 05:09:08

标签: c arrays function pointers malloc

我在第4行收到错误,说“初始化程序无效”。我知道错误意味着什么,但我无法理解为什么我得到错误。我已经尝试了各种指针和值的组合,但它似乎并不想工作。任何有关代码的帮助/反馈将不胜感激。

注意:我计划为棋盘设置一个2D数组,这意味着内存malloc的64个内存。       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;
}

3 个答案:

答案 0 :(得分:1)

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

int *newBoard = newBoard();(使用堆内存)或int newBoard[7][7];(使用堆栈内存)都可以。你试图做一半!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

#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;
}