Нарушение доступа при записи динамического 2D-массива ... Иногда - PullRequest
0 голосов
/ 12 апреля 2010

Эта программа предназначена для генерации динамического массива, однако выдает ошибку нарушения доступа при записи при заданных определенных измерениях. Например: R = 6, C = 5 падает, но тогда R = 5, C = 6 нет. Если вам интересно, это не моя домашняя работа, чтобы "исправить" эту неисправную программу, это метод, которому нас учили в классе Также частью моей оценки является использование этого метода, поэтому векторы отсутствуют. Заранее спасибо!

#include <iostream>

using namespace std;

int main(){

const int R = 6;
const int C = 5;

char **d;

d = new char *[R];

for(int i=0; i<C; ++i){
    d[i] = new char[C];
}

//initialise
for(int i=0; i<R; ++i){
    for(int j=0; j<C; ++j){
        d[i][j] = 'd';
        cout<<d[i][j];
    }
    cout<<endl;
}
cout<<endl;

system("pause");
return 0;
}

Ответы [ 2 ]

4 голосов
/ 12 апреля 2010
for(int i=0; i<C; ++i){
    d[i] = new char[C];
}

должно быть

for(int i=0; i<R; ++i){
    d[i] = new char[C];
}
3 голосов
/ 12 апреля 2010

Ваш первый цикл создает новый массив char для элементов массива d между 0 и C-1 включительно.

Второй внешний цикл идет от 0 до R-1 включительно. Таким образом, последний d[i] доступ не инициализирован. Как правило, это потерпит неудачу.

Чтобы решить эту проблему, используйте это в качестве первого цикла

for(int i=0; i<R; ++i){
    d[i] = new char[C];
}
...