下标值既不是数组也不是指针也不是向量的错误

时间:2015-08-20 00:47:22

标签: c arrays pointers

    void display_grid(struct game_board *M, FILE *stream) {
        int i, j;

        /* malloc memory for appropriate amount of rows */
        M->border = malloc(sizeof(*M->border) * (M->width + 4));


        for (i = 0; i <= M->width; i+=2){
            M->border[i] = M->border[M->width + 1] = '+';
            for (j = 1; j <= M->width; j+=2){
                M->border[j] = M->border[M->width] = ' ';
                fprintf(stream, "%c\n", M->border[i][j]);
            }
        }
        M->border[M->width + 2] = '\0';

        fflush(stream);
   }

我的问题是关于这一行fprintf(stream, "%c\n", M->border[i][j]);发出错误并阻止整个程序编译。

目前我只是尝试从用户从命令行提供的高度和宽度读取并使用它来打印出2D网格,然后我可以使用它来修改等等。

我有一个解决方案,我 THINK 可以修复它,但我不知道如何实现它。我相信为了解决这个问题,我需要将malloc border作为**然后将malloc行作为*

1 个答案:

答案 0 :(得分:0)

试试这个:

int **A;                        /* A points nowhere in particular */

A = malloc(sizeof(int*) * 3);   /* A points to the head of an array of int* */

A[0] = malloc(sizeof(int) * 4); /* the first element of A points to an array of int */
A[1] = malloc(sizeof(int) * 4);
A[2] = malloc(sizeof(int) * 4);

/* A can now be used as a 3x4 array */

A[2][3] = 99;
printf("%d\n", A[2][3]);

/* don't forget to tidy up */

free(A[0]);
free(A[1]);
free(A[2]);
free(A);

不要尝试任何更复杂的事情,直到你完全理解它并完全理解它为止。