填充2D动态数组时“无法读取内存”

时间:2016-02-07 21:32:49

标签: c++ arrays

下面的代码在尝试填充数组的第一个元素时填充动态2D数组的for循环失败。

调试器告诉我它无法读取内存。

在此期间,rows = 7cols = 20

// sets rows to number of newline characters in the file

int rows = countRows("BookMaze.txt") + 1;  /* +1 bc last row has no                     
                                              newline char */

// sets number of columns to number of characters on a single row in a file
int cols = countCols("BookMaze.txt");

char **p_rows;

// allocate
p_rows = new char*[rows];
for (int i = 0; i < rows; i++)
    p_rows[rows] = new char[cols];

// fill
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        p_rows[i][j] = '*';
    }
}

1 个答案:

答案 0 :(得分:1)

你有错误/错误:

11

应该是:

for (int i = 0; i < rows; i++)
    p_rows[rows] = new char[cols];
           ^^^^

请注意,您应该尝试远离旧的skool C风格内存分配并使用正确的C ++容器。在这种特殊情况下,for (int i = 0; i < rows; i++) p_rows[i] = new char[cols]; ^ 将是比原始C风格数组更好的选择。