I was doing something when learning and i have encountered the next problem. To simplify and to shorten the question i reduced the code exactly to the problem.
I want to read a matrix and just output it on my screen. But when i run this piece of code:
int main(){
int in, jn, row, col, **mat;
scanf("%d %d", &row, &col);
mat = (int **) malloc(row * col * sizeof(int *));
for(in = 0; in < col; in++){
mat[in] = (int *) malloc((col + 1) * sizeof(int));
}
if(mat == NULL){
printf("Error. Allocation was unsuccessful. \n");
return 1;
}
for(in = 0; in < row; in++){
for(jn = 0; jn < col; jn++){
scanf("%d", &mat[in][jn]);
}
}
for(in = 0; in < row; in++){
for(jn = 0; jn < col; jn++){
printf("%d ", mat[in][jn]);
}
printf("\n");
}
return 0;
}
i get segmentation fault. I debugged the program and the error appears when in = 2 and jn = 0. So i read: 1 2 3 4 and here i get the segmentation fault, when trying to read into mat[2][0]. And i do not understand why. The error
And i have another version of this here:
int main(){
int in, jn, row, col;
scanf("%d %d", &row, &col);
int mat[row][col];
for(in = 0; in < row; in++){
for(jn = 0; jn < col; jn++){
scanf("%d", &mat[in][jn]);
}
}
for(in = 0; in < row; in++){
for(jn = 0; jn < col; jn++){
printf("%d ", mat[in][jn]);
}
printf("\n");
}
return 0;
}
The problem with this one is that i can`t see the the values in watches in codeblocks. For mat[0][0](by example) instead of the first element of the matrix i see this "Cannot perform pointer math on incomplete types, try casting to a known type, or void *."
For me this is a strange behavior and i do not understand it. Why do i get segmentation fault in the first version and why can`t i see the matrix in watches window?