Я хочу напечатать его в обычном порядке
Лучше написать print_board
процедуру, которую можно затем вызвать из GDB.
(что довольно сложно в GDB).
Это потому, что вы сделали это трудно.
Проблема заключается в том, что ваша доска, а не непрерывная в памяти (как это принято и будет тривиальной для печати в GDB), вместо этого распространена в 64 отдельных кусках по 2 значения каждый.
Поскольку вы используете C++, вы будете лучше использовать вектор векторов:
vector<vector<int>> board;
board.resize(col);
for (int i = 0; i < col; i++) {
board[i].resize(row);
}
(gdb) print board
$1 = std::vector of length 64, capacity 64 =
{std::vector of length 2, capacity 2 = {0, 0},
std::vector of length 2, capacity 2 = {0, 0},
...
P.S. При задании вопросов полезно показать актуальный код. Ваш вопрос имеет неправильный тип для board
и смешивает board
с array
.
Update:
Как я могу это сделать (используйте print_board
из GDB)?
Вот пример. Предположим, что ваш источник выглядит следующим образом:
1 #include <stdio.h>
2
3 int main()
4 {
5 int col = 16, row = 2;
6 int **board = new int*[col];
7
8 for (int i = 0; i < col; i++) {
9 board[i] = new int[row];
10 }
11
12 // Initialize elements to something interesting, so we can see them
13 // printed.
14 for (int i = 0; i < col; i++)
15 for (int j = 0; j < row; j++)
16 board[i][j] = 100*i + j;
17
18 return 0;
19 }
20
21 void print_board(int **board, int col, int row)
22 {
23 for (int j = 0; j < row; j++) {
24 for (int i = 0; i < col; i++) {
25 printf("\t%d", board[i][j]);
26 }
27 printf("\n");
28 }
29 }
Затем с помощью GDB:
gdb -q ./a.out
(gdb) break 18
(gdb) run
Breakpoint 2, main() at t.cc:18
18 return 0;
(gdb) call print_board(board, col, row)
0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500
1 101 201 301 401 501 601 701 801 901 1001 1101 1201 1301 1401 1501
вуаля
Вы должны предпочесть C++ [контейнеров] (http://en.cppreference.com/w/ CPP/контейнер). Вы запросите проблемы, кодируя этот путь. –