Problem in 'while' Schleife

Hallo
Bei folgendem Code stürzt mein Programm ab. Der Debugger(gdb unter Mac OS X) gibt die Meldung „EXC_BAD_ACCESS“ am Beginn der „while“ Schleife aus.

#include 
typedef struct ddb\_typedef{
 struct ddb\_typedef \* next;
 struct ddb\_typedef \* before;
 char name[DDB\_TYPE\_TYPE\_NAME\_LENGTH];
 char type;
 struct ddb\_data\_types \* first\_type;
}ddb\_Typedef;
…
ddb\_Typedef \* Current\_Typedef;
while(Current\_Typedef-\>next!=NULL){
 Current\_Typedef=Current\_Typedef-\>next;
}

Was bedeutet das?
Danke im voraus, Stefan

Hallo!
Ich würde mal sagen, es fehlt schlichtweg (1) die Speicherallokation für Current_Typedef und (2) die Initialisierung der Zeiger mit null.

So, wie’s dasteht, ist Current_Typedef nur ein Zeiger auf Deine Struktur, aber auf welche konkrete Struktur er zeigen soll, hast Du nicht angegeben => Crash.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Martin

Ich würde mal sagen, es fehlt schlichtweg (1) die
Speicherallokation für Current_Typedef und (2) die
Initialisierung der Zeiger mit null.

Ich habe dafür eine Kontrolle geschrieben, die aber nicht funktioniert hat weil ich „=“ statt „==“ geschrieben habe. Schwer zu finden, besonders wenn man nicht dran denkt(weil man nur den Sch… Taschenrechner gewohnt ist, den wir in der Schule haben:smile:.
Danke, Stefan

Mach’ Dir nix draus, ich hab’ schon mal > 1 Stunde debuggt, weil ich immer wieder ein Semikolon unmittelbar nach einem for() überlesen habe.
Manchmal ist man einfach betriebsblind. Da hilft es zumindest mir häufig schon, wenn ich einfach jemand anderem das Problem erzähle. Der andere muss noch nicht mal was davon verstehen, einfach durch’s erzählen komme ich oft auf die Lösung… :smile:

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo ihr beiden!

Ich habe dafür eine Kontrolle geschrieben, die aber nicht
funktioniert hat weil ich „=“ statt „==“ geschrieben habe.

Da ist es (geht nicht immer, aber oft) sehr hilfreich, beim Vergleich die Konstanten links zu schreiben: „if (NULL = my_ptr) {…}“ lässt sich nämlich im Gegensatz zu „if (my_ptr = NULL) {…}“ nicht compilieren.

Mach’ Dir nix draus, ich hab’ schon mal > 1 Stunde debuggt,
weil ich immer wieder ein Semikolon unmittelbar nach einem
for() überlesen habe.

Ähm, das sollte übrigens jeder halbwegs brauchbare Compiler zumindest als Warning anmeckern. Immer mit dem höchsten Warning-Level compilieren, und am besten gleich auch Warnings als Fehler behandeln, dann kommt man gar nicht erst in Versuchung die eine oder andere Warning zu ignorieren (um dann die tatsächlich wichtige Warning zu übersehen).

Manchmal ist man einfach betriebsblind. Da hilft es zumindest
mir häufig schon, wenn ich einfach jemand anderem das Problem
erzähle. Der andere muss noch nicht mal was davon verstehen,
einfach durch’s erzählen komme ich oft auf die Lösung… :smile:

Das stimmt. Das liegt meiner Meinung nach daran, dass man in dem Fall gezwungen ist, das Problem aus einer völlig anderen Blickrichtung zu beschreiben, als man es selber gerade gesehen hat. Funktioniert bei mir mittlerweile übrigens manchmal auch schon, ohne dass es den „Anderen“ überhaupt gibt: Ich überlege mir, wenn ich vor einer Blockade stehe, wie ich das Problem jemand anderem erklären könnte, und komme dadurch dann (nicht besonders oft, aber doch hin und wieder) auf die Lösung.

Gruß aus Wien,
Martin

oder man erzält es lint
Hallo Ihr Drei,

wenn die höchste Warnstufe nicht ausreicht, dann kann man sein Program ja auch gleich Lint anvertrauen. Da fallen dann so ziemlich alle „Ungewöhnlichkeiten“ bei auf.

Aber natürlich habt Ihr recht, wie bei dem Klassiker

 Paris
 in the 
 the spring

ersichtliche, gibt es keine Möglichkeit der Betriebsblindheit letztendlich zu entkommmen.

Gruß
achim