Access Violation When Writing Dynamic 2D Array… Sometimes
-
26-09-2019 - |
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;
}
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