Possible Duplicate:
casting char[][] to char** causes segfault?
I have a 2D array declared like this:
int arr[2][2]={ {1,2},{3,4}};
Now if I do:
int ** ptr=(int**) arr;
and:
cout<<**ptr;
I am getting a segmentation fault (using g++-4.0).
Why so? Shouldn’t it be printing the value 1 (equal to arr[0][0])?
You are attempting to assign a double pointer variable to an array… this has been covered exhaustively, see here for information on this. Furthermore, since you declared
and then try to assign
arrto a double pointerwhich is guaranteed to not work, hence a segmentation fault. Furthermore, that statement
int ** ptr=(int**) arr;is actually cast ing one type (i.e. [][]) to another type (i.e. **) despite they are of type ‘int’. They are both different and the compiler will interpret that very differently…You could do it this way:
Now
*(ptr + 1)will refer to the 0’th row,*(ptr + 2)will refer to the 1’st row and so on. The only onus on you is to not overstep the markers of wherearris used otherwise an overflow can happen or even a segmentation fault…