Zakum Geschrieben 11. Mai 2008 Teilen Geschrieben 11. Mai 2008 Hallo Ich hab (mal wieder ) einen kleinen Disput mit meinem Compiler und bin etwas ratlos. Und zwar geht es darum, dass ich ein Programm, das vorher mit lauter globalen Variablen (fehlerfrei) lief jetzt modularisieren möchte... Also weg mit dem ganzen globalen zeug, dachte ich mir. Ging auch ganz gut, bis es dazu kam, dass ich in einer rekursiven Funktion Zeiger übergeben wollte: void lokalisieren(int x, int y, int *count, double grauwert[256][256]) { tmp[*count].x=x; tmp[*count].y=y; //Koordinaten des schwarzen Punktes speichern grauwert[x][y]=50; //schwarzen Punkt löschen, damit nicht doppel gezählt wird ++ Farbänderun, später weg ++count; if (grauwert[x][y+1]==0) lokalisieren(x,y+1,&count,grauwert); if (grauwert[x][y-1]==0) lokalisieren(x,y-1,&count,grauwert); if (grauwert[x-1][y+1]==0) lokalisieren(x-1,y+1,&count,grauwert); if (grauwert[x-1][y]==0) lokalisieren(x-1,y,&count,grauwert); if (grauwert[x-1][y-1]==0) lokalisieren(x-1,y-1,&count,grauwert); if (grauwert[x+1][y+1]==0) lokalisieren(x+1,y+1,&count,grauwert); if (grauwert[x+1][y]==0) lokalisieren(x+1,y,&count,grauwert); if (grauwert[x+1][y-1]==0) lokalisieren(x+1,y-1,&count,grauwert); } sowie natürlich der Aufruf: lokalisieren(x,y,&count,grauwert); So wie das ganze jetzt aussieht, liefert mir der Compiler für jede der if-Zeilen folgende Warnung: Übergabe von Argument 3 von lokalisieren von inkompatiblen Zeigertyp Was beim ausführen natürlich auch einen Segmentation-faul verursacht. Als ich testweise das & weggelassen habe, war der compiler wieder still... Gab allerdings wieder einen Segmentation-fault (was ja auch logisch ist, ich will ja schlieslich die Adresse übergeben). Weiß vlt. jemand, was das alles zu bedeuten hat? :eek Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bubble Geschrieben 11. Mai 2008 Teilen Geschrieben 11. Mai 2008 Übergabe von Argument 3 von lokalisieren von inkompatiblen Zeigertyp Du hast einen Zeiger auf eine Integer-Variable: int *count; Wenn Du nun an eine Funktion &count übergibst, wäre dies ein Zeiger auf einen Zeiger, der auf eine Integer-Variable zeigt. Das entspricht nicht der Parametervereinbarung im Funktionskopf, daher beschwert sich der Compiler. In Deinem Fall darfst Du nur "count" übergeben, denn das ist bereits ein Zeiger. Zeigt count bei Dir auf ein angemessen großes Array oder nur auf eine einzelne Zählvariable? Falls letzteres, ist "++count;" die Ursache der Abstürze, da Du hier den Zeiger erhöhst, der dann auf eine unbekannte Speicherstelle zeigt. Falls Du den Inhalt der Variablen, auf die count zeigt, erhöhen möchtest, dann schreibe "(*count)++;". (Zuerst den Zeiger dereferenzieren und dann den Inhalt der eigentlichen Variable/Speicherstelle erhöhen.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Zakum Geschrieben 11. Mai 2008 Autor Teilen Geschrieben 11. Mai 2008 :upps Manchmal ist man aber auch wie vernagelt! Hab dieses ++count einfach jedes mal übersehen, war natürlich das, was ich gesucht hatte. Vielen Dank, bubble! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.