views:

170

answers:

2

This program is meant to generate a dynamic array, however it gives an access violation error when writing when given certain dimensions. Eg: R = 6, C = 5 crashes, but then R = 5, C = 6 doesn't. In case your wondering, it isn't my homework to "fix" this broken program, this is the method we were taught in class. Also part of my assessment is to use this method, so vectors are out. Thanks in advance!

#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;
}
+3  A: 

Your first loop creates a new char array for elements of the d array between 0 and C-1 inclusively.

The second outer loop goes from 0 to R-1 inclusively. So the last d[i] accessed is not initialized. This will typically fail.

To solve the problem, use that as your first loop

for(int i=0; i<R; ++i){
    d[i] = new char[C];
}
Philippe Beaudoin
+4  A: 
for(int i=0; i<C; ++i){
    d[i] = new char[C];
}

should be

for(int i=0; i<R; ++i){
    d[i] = new char[C];
}
sza
Thanks :), that works great.
Shraptnel