Hallo Leute,
Ich habe ein Programm geschrieben, aber diese stürzt komischerweise beim
aufrufen ab. Ich habe es heute in der Schule probiert, und dort hat es
zuerst nicht funktioniert, dann habe ich einen neuen Ordner auf meinem
Stick erstellt und es dort aufgerufen und dann ging es.
Jetzt zuhause geht es wieder nicht. Ich benutze Codeblocks.
Kurz zum Programm, es sollen mehrere Obejktnummern eingelesen werden und
diese dann ausgegeben werden bzw ein gewünschtes gelöscht werden können.
Hier der Code:
tja.
Aber nur weil du mittels malloc Speicher allokiert hast, bedeutet das
nicht, dass da nur 0-en (und damit ein NULL Pointer) drinnen steht.
schreib dir eine Funktion, die ein neues Haus allokiert und dabei den
Inhalt des neuen Hauses in einen vernünftigen Zustand bringt.
Und die Funktion verwendest du dann, wenn du ein neues Haus brauchst.
Ich weiß nicht, ob ihr das schon gelernt habt.
Aber das hier (beispielsweise), ist eine sehr mühsame Schreibweise
1
(*head).zg=n;
Klammer auf, den Stern und wieder Klammer zu. Sie ist allerdings zu 100%
richtig. Da kann man nicht meckern.
Und da das ziemlich mühsam zu tippen ist und dabei auch leicht Fehler
entstehen, gibt es in C eine alternative Schreibweise.
1
(*a).b
2
3
ist exakt völlig identisch zu
4
5
a->b
Du kannst also anstelle von
1
(*head).zg=n;
auch
1
head->zg=n;
schreiben. Das ist exakt identisch dazu.
Letzteres ist die übliche Schreibweise. Der '->' (Pfeil) symbolisiert
dabei das Dereferenzieren eines Pointers in einen Strukturmember.
Die Schreibweise kennen wir nicht und das Programm ist ja richtig, einer
aus meiner Klasse hat es auch getestet und es ging bei ihm von daher...
Und wie gesagt nachdem ich das Programm direkt auf den Stick kopiert
habe ging es in der Schule ja auch.
Übrigens kommt das abstürzen nur wenn ich "e" drücken will bei b wird es
beendet und bei l steht da dann "waehle zu loeschenden Objektnr aus:"
natürlich crasht es dann wenn ich was eingebe.
Programmierer schrieb:> Die Schreibweise kennen wir nicht
ok, dann will ich deinem Lehrer auch nicht vorgreifen.
> und das Programm ist ja richtig,
Nein, ist es nicht.
Das ist schwer fehlerhaft.
> einer> aus meiner Klasse hat es auch getestet und es ging bei ihm von daher...
Durch testen kann man nur die Anwesenheit von Fehlern feststellen, nie
die Abwesenheit. Wenn ein Programm fehlerhaft ist, heisst das noch lange
nicht, dass es sofort und immer abstürzt. Je nachdem, in welchem Zustand
der Speicher ist, denn das Betriebssystem auf die Anforderung hin
rausrückt, können da 0-en drinnen stehen. Können - müssen aber nicht.
Es gibt keine Garantie dafür, welche Werte im Speicher stehen, der von
malloc allokiert wird. Entweder du bringst dieses neue Objekt selbst in
einen defnierten Zustand oder du benutzt calloc. Das nullt den Speicher
aus, was dich zumindest in diesem Fall retten würde.