Question

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;
}
Was it helpful?

Solution

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];
}

OTHER TIPS

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];
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top