C 在代码块中给出分段错误的基于指针的代码

C 在代码块中给出分段错误的基于指针的代码,c,pointers,codeblocks,C,Pointers,Codeblocks,这是我的密码。我总是在代码末尾出现分段错误。所有的事情都进行得很好,但最后出现了分割错误 我正在准备跳棋游戏,第一步是用一个符号初始化每个棋子。此代码尝试执行相同的操作 代码块版本:13.12 视窗7 #include <stdio.h> #include <stdlib.h> #define boardheight 8 #define boardwidth 8 struct Player_symbols{ char symbol; char king_

这是我的密码。我总是在代码末尾出现分段错误。所有的事情都进行得很好,但最后出现了分割错误

我正在准备跳棋游戏,第一步是用一个符号初始化每个棋子。此代码尝试执行相同的操作

代码块版本:13.12 视窗7

#include <stdio.h>
#include <stdlib.h>

#define boardheight 8
#define boardwidth 8
struct Player_symbols{
    char symbol;
    char king_symbol;
};

struct Checker_piece{
    char king;
    int on_board;
    int num_moves;
    int player;
    struct Player_symbols* symbols;
};

int pieces_count[2] = {12,12};
struct Checker_piece* player_1_pieces;
struct Checker_piece* player_2_pieces;

void initialize_player_pieces(struct Checker_piece* player_pieces, struct Player_symbols* player_symbols, int player_num);
void initialize_board(struct Checker_piece* checker_board[boardheight][boardwidth],struct Checker_piece* player1,struct Checker_piece* player2);
void print_board(struct Checker_piece* checker_board[boardheight][boardwidth]);
int move_piece(struct Checker_piece* checker_board[boardheight][boardwidth], int x,int y,int player);
void continue_jumping(struct Checker_piece* checker_board[boardheight][boardwidth],int* y,int* x,int player);
int generate_destination(int x, int *dest_x, int *dest_y, int *dest_y_jump,int dest_y2,int dest_y2_jump,int move_flags,int player);

int main()
{

    struct Checker_piece* checker_board[boardheight][boardwidth];
    struct Checker_piece* dummy;
    struct Player_symbols* dummy_symbol;
    //declare and initialize the Checker_piece structures by allocating memory dynamically using a dummy structure to determine its size
    player_1_pieces = malloc(12*sizeof dummy);
    player_2_pieces = malloc(12*sizeof dummy);
    struct Player_symbols *player_1_symbols,*player_2_symbols;

    player_1_symbols = malloc(sizeof dummy_symbol);
    player_2_symbols = malloc(sizeof dummy_symbol);

    //initialize the player symbols
    player_1_symbols->symbol = 'o';
    player_1_symbols->king_symbol = 'O';
    player_2_symbols->symbol = 'x';
    player_2_symbols->king_symbol = 'X';

    initialize_player_pieces(player_1_pieces,player_1_symbols,1);
    initialize_player_pieces(player_2_pieces,player_2_symbols,2);

    printf("Done");
    return 0;
}

void initialize_player_pieces(struct Checker_piece* player_pieces, struct Player_symbols* player_symbols, int player_num){
    int i;
    for (i=0; i<12; i++, player_pieces++ ) {
        player_pieces->king='N';
        player_pieces->num_moves=0;
        player_pieces->on_board=1;
        player_pieces->player=player_num;
        player_pieces->symbols= player_symbols;
    }
}
#包括
#包括
#定义板高8
#定义板宽8
struct Player_符号{
字符符号;
字符king_符号;
};
结构检查器{
炭王;
板上的int;
int num_移动;
国际球员;
struct Player_符号*符号;
};
整数块数[2]={12,12};
结构棋盘格棋子*玩家棋子1棋子;
结构棋盘格棋子*玩家棋子;
无效初始化玩家棋子(结构棋子棋子*玩家棋子,结构玩家棋子*玩家棋子,整数玩家棋子);
无效初始化棋盘(结构棋盘格棋盘格棋盘格棋盘[棋盘高度][棋盘宽度]、结构棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格棋盘格;
无效打印板(结构棋盘格*棋盘格[boardheight][boardwidth]);
内部移动块(结构棋盘格棋盘格棋盘格[boardheight][boardwidth],内部x,内部y,内部播放器);
无效继续跳(结构棋盘格棋子棋盘格棋盘[boardheight][boardwidth],int*y,int*x,int-player);
int生成目的地(int x、int*目的地x、int*目的地y、int*目的地y跳转、int目的地y2、int目的地y2跳转、int移动标志、int玩家);
int main()
{
结构棋盘格*棋盘格[boardheight][boardwidth];
结构检查器\u件*假人;
结构玩家符号*虚拟符号;
//通过使用虚拟结构动态分配内存来确定其大小,从而声明并初始化棋盘格结构
玩家1个棋子=malloc(12*sizeof dummy);
玩家2个棋子=马洛克(12*sizeof dummy);
结构游戏者符号*游戏者符号,游戏者符号;
玩家1个符号=malloc(虚拟符号的大小);
玩家2个符号=malloc(虚拟符号的大小);
//初始化播放器符号
玩家_1_符号->符号='o';
玩家符号->国王符号='O';
玩家2_符号->符号='x';
玩家符号->国王符号='X';
初始化玩家棋子(玩家棋子,玩家符号,1);
初始化玩家棋子(玩家棋子,玩家棋子符号,2);
printf(“完成”);
返回0;
}
无效初始化玩家棋子(结构棋子棋子*玩家棋子,结构玩家棋子*玩家棋子,整数玩家棋子){
int i;
对于(i=0;iking='N';
玩家棋子->移动次数=0;
玩家棋子->棋盘上=1;
玩家\u个->玩家=玩家\u个;
玩家棋子->符号=玩家符号;
}
}

您的
检查板
被声明为指针数组,而它应该是
结构的数组
。对于
虚拟
虚拟符号
(顺便说一句,您甚至不需要)

如果您想
malloc
一个符号,那么
malloc
是一个符号,而不是指向符号的指针。但您甚至不需要
malloc
这些:只需声明基于堆栈的变量:

struct Player_symbols player_1_symbols; // no pointer, no malloc needed

我建议您对代码做一点小小的修改。 在使用结构时,将内存动态分配给结构,而不是指向变量的指针

struct Checker_piece* checker_board[boardheight][boardwidth];



 struct Checker_piece* dummy;
    struct Player_symbols* dummy_symbol;

    player_1_pieces = (Checker_piece *)malloc(12*sizeof(Checker_piece));
    player_2_pieces = (Checker_piece *)malloc(12*sizeof(Checker_piece));
    struct Player_symbols *player_1_symbols,*player_2_symbols;

    player_1_symbols = (Player_symbols *)malloc(sizeof(Player_symbols));
    player_2_symbols = (Player_symbols *)malloc(sizeof(Player_symbols));

PS如果你是用C编程的,你不需要输入cast malloc。

sizeof dummy\u symbol
sizeof dummy
不是你想象的那样。我想这与代码块无关。我猜是索引越界,即超过数组大小的位置。你能建议如何声明ar吗棋盘格的结构射线?要声明
结构的数组
,只需取出
*