Ok mój C jest nieco zardzewiały, ale pomyślałem, że zrobię mój następny (mały) projekt w C, więc mogę polerować kopię zapasową na nim i mniej niż 20 linii w już mam wadę seg.odlewanie char [] [] na char ** powoduje uszkodzenie?
To mój kompletny kod:
#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;
}
jestem kompletnie zdezorientowany, jak to jest przyczyną segfault. Co się dzieje podczas przesyłania z [][]
do **
!? To jest jedyne ostrzeżenie, które otrzymuję.
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]’
Czy [][]
i **
naprawdę nie kompatybilne typy wskaźnik? Wydaje się, że są dla mnie tylko składnią.
"Nieodpowiednie typy wskaźników"? Co masz na myśli? Twój typ '[] []' jest typem * array *, a nie wskaźnikiem. Dlaczego mówisz o '[] []' jako typie wskaźnika ??? – AnT
@Andrey to duża, ogromna dziura w mojej wiedzy C. W pełni rozumiem wskaźniki, ale nie tablice. :) – Earlz