вставить в динамический 2d массив в c - PullRequest
0 голосов
/ 29 ноября 2011

я пытаюсь вставить значение в динамический двумерный массив символов:

    theBoard->_board[row][col] = val;

но при каждом назначении символа (строка, столбец) он также включает его (ряд-1, столб + 8). в чем может быть проблема?

вот распределение массива:

    if ((new = (BoardP) malloc(sizeof(struct Board))) == NULL)
{
    reportError(MEM_OUT);
    return NULL;
}
if ((new->_board = (char**) malloc(rows * sizeof(char*))) == NULL)
{
    reportError(MEM_OUT);
    return NULL;
}
int i,j;
for (i=0;i<rows;i++)
{
    if ((new->_board[i] = (char*) malloc(cols * sizeof(char))) == NULL)
    {
        reportError(MEM_OUT);
        return NULL;
    }

когда я вставляю 'X' и печатаю с:

BoardP b = createNewDefaultBoard();
b->_board[2][0] = 'X';
printBoard(b,0,0);

Я получаю этот вывод:

     0  1  2  3  4  5  6  7  8  9
0                                
1                            X   
2    X                           
3                                
4                                
5                                
6                                
7                                
8                                
9                                

1 Ответ

2 голосов
/ 29 ноября 2011

Ваша доска, вероятно, имеет только 8 столбцов. Если вы обращаетесь к столбцу 8+, вы будете читать (или писать) все, что находится в памяти, что для всех, кроме последней строки, является следующей строкой.

 <0,1> <0,2> <0,3> <0,4> <0,5> <0,6> <0,7>  --> 
 <1,0> <1,2> <1,3> <1,4> <1,5> <1,6> <1,7>  -->
 ...
...