Ok mi C está un poco oxidado pero pensé que haría mi próximo (pequeño) proyecto en C para poder pulir de nuevo en él y menos de 20 líneas en que ya tengo un fallo seg.casting char [] [] a char ** provoca segfault?
Este es mi código completo:
#define ROWS 4
#define COLS 4
char main_map[ROWS][COLS+1]={
"a.bb",
"a.c.",
"adc.",
".dc."};
void print_map(char** map){
int i;
for(i=0;i<ROWS;i++){
puts(map[i]); //segfault here
}
}
int main(){
print_map(main_map); //if I comment out this line it will work.
puts(main_map[3]);
return 0;
}
estoy completamente confundido en cuanto a cómo esto está causando una violación de segmento. ¿Qué sucede cuando se lanzan desde el [][]
al **
? Esa es la única advertencia que recibo.
rushhour.c:23:3: warning: passing argument 1 of ‘print_map’ from incompatible pointer type rushhour.c:13:7: note: expected ‘char **’ but argument is of type ‘char (*)[5]’
son [][]
y realmente no **
tipos de puntero compatible? Parecen que son solo sintaxis para mí.
"Tipos de punteros no compatibles"? ¿Qué quieres decir? Su tipo '[] []' es un tipo * array *, no un tipo de puntero. ¿Por qué te refieres a '[] []' como un tipo de puntero ??? – AnT
@Andrey es una gran brecha obvia en mi conocimiento de C. Entiendo completamente los punteros pero no las matrices. :) – Earlz