我正在尝试将字符放入我的二维数组中。我定义了这些对象:
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
的地址。
一个好的编译器应该警告您传递不兼容的指针类型。
正如评论所说,你在指针方面做得太过火了。在大多数使用指针的地方,可能根本不需要指针。