我正在尝试将字符放入我的二维数组中。我定义了这些对象:

typedef struct board {
char* board[25][80];
}Board;

typedef struct obstacleA {
int* x;
int* y;
}ObstacleA;

typedef struct obstacleC {
int* x;
int* y;
}ObstacleC;

typedef struct obstacleB {
int* x;
int* y;
}ObstacleB;

typedef struct Star {
int *x;
int *y;
int *power;
}Star;

typedef struct Cross {
int *x;
int *y;
int *power;
}Cross;

我的spawn函数为我的对象提供随机数(或坐标)
void spawn(Board* board, Cross* cross, Star* star, ObstacleA* A, ObstacleB* B, ObstacleC* C) {

srand(time(NULL));

cross->x = (1 + rand() % 24);
cross->y = (1 + rand() % 79);

star->x = (1 + rand() % 24);
star->y = (1 + rand() % 79);

A->x = (1 + rand() % 24);
A->y = (1 + rand() % 79);

B->x = (1+ rand() % 24);
B->y = (1+ rand() % 79);

C->x = (1 + rand() % 24);
C->y = (1 + rand() % 79);

putBoard(&board, &cross, &star, &A, &B, &C);
}

putBoard函数将字符放在适当的坐标中:
void putBoard(Board* board, Cross* cross, Star* star, ObstacleA* A, ObstacleB* B, ObstacleC* C) {

board->board[*star->x][*star->y] = '*';
board->board[*cross->x][*cross->y] = '+';
board->board[*A->x][*A->y] = 'A';
board->board[*B->x][*B->y] = 'B';
board->board[*C->x][*C->y] = 'C';
}

但是,在运行程序时,我得到一个“异常抛出:写访问冲突”。
电路板是0x21C3BD2。”
在“board->board[*C->x][*C->y] = 'C';”行。

最佳答案

当您调用putBoard时,您将一个指针传递给指向板的指针。也就是说,您传递的是Board **类型的内容。与传递给putBoard的其他参数相同,您将指针传递给指针。
&调用putBoard时,不要使用operatorspawn的地址。
一个好的编译器应该警告您传递不兼容的指针类型。
正如评论所说,你在指针方面做得太过火了。在大多数使用指针的地方,可能根本不需要指针。

10-07 22:30