Почему я получаю исключение нарушения прав записи - PullRequest
0 голосов
/ 13 сентября 2018

Я новичок в C и уже дважды сталкивался с этой проблемой.

Проблема в том, что я получаю ошибку нарушения доступа при попытке запустить следующую программу. Исключение выдается в функции initialize_board(). Я поставил комментарий к конкретной строке.

Любое понимание от тех, кто имеет больше опыта, будет оценено!

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

/* global variables */
const int BOARD_SIZE = 3;
const char X = 'X';
const char O = 'O';
char** active_board;

//creates a square 2d array of size BOARD_SIZE
void create_board() {
    //ptrs to array of chars
    active_board = (char*)malloc(sizeof(char*)*BOARD_SIZE);
    for (int i = 0; i < BOARD_SIZE; i++) {
        active_board[i] = (char)malloc(sizeof(char) * BOARD_SIZE);
    }
}

//fills board with either char X or O
void initialize_board(char symbol) { //symbol:= X or O
    for (int i = 0; i < BOARD_SIZE; i++) {
        for (int j = 0; j < BOARD_SIZE; j++) {
            active_board[i][j] = symbol;// <---EXCEPTION THROWN HERE
        }
    }
}

int main() {
    create_board();
    initialize_board(X);

    return 0;
}`

1 Ответ

0 голосов
/ 13 сентября 2018

Проблема в том, что такие приведения

active_board = (char*)malloc(sizeof(char*)*BOARD_SIZE); /* Must return `char **` */
for (int i = 0; i < BOARD_SIZE; i++) {
    active_board[i] = (char)malloc(sizeof(char) * BOARD_SIZE); /* Must return `char *` */
}

Не разыгрывают malloc :

active_board = malloc(sizeof(char*)*BOARD_SIZE);
for (int i = 0; i < BOARD_SIZE; i++) {
    active_board[i] = malloc(sizeof(char) * BOARD_SIZE);
}
...