Da ich länger nichts mehr mit C gemacht hab, und meine Kenntnisse wohl doch einige neue Löcher aufweisen bekomm ich immer einen Speicherzugriffsfehler(an der markierten stelle tritt es auf). Es wär schön wenn einer meinen fehler sieht und mich aufklären könnte.
#include
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
aktu->matrikel ist eine int variable, nur aktu ist ein zeiger. Wäre aktu eine instanz von struct list, dann wäre aktu.matrikel ja auch eine int variable.
Anders ist es bei den char-arrays. Dort ist der arrayname automatisch die adresse des arrays.
Statt z.b. aktu.vorname könnte man auch &aktu.vorname[0] schreiben, denn tatsächlicht ist ja nur vorname[0] eine char variable. Darum reicht die angabe aktu.vorname bzw. aktu->vorname als zeiger auch ein char array.
Gibt man nun statt &aktu->matrikel nur aktu->matrikel an, dann interpretiert scanf() den inhalt der int variablen als adresse einer int variablen und schreibt dorthin den eingelesenen wert.
Je nach compiler und compilerflags ist der inhalt von stackvariablen und mallocspeicher undefiniert, 0 oder ein speicherschutzmuster (gedacht für den debugger, der dadurch erkennen kann, dass nicht initialisierte variablen verwendet werden, klappt natürlich nicht immer, aber recht oft).
mr.escape
Anders ist es bei den char-arrays. Dort ist der arrayname automatisch die adresse des arrays.
Statt z.b. aktu.vorname könnte man auch &aktu.vorname[0] schreiben, denn tatsächlicht ist ja nur vorname[0] eine char variable. Darum reicht die angabe aktu.vorname bzw. aktu->vorname als zeiger auch ein char array.
Gibt man nun statt &aktu->matrikel nur aktu->matrikel an, dann interpretiert scanf() den inhalt der int variablen als adresse einer int variablen und schreibt dorthin den eingelesenen wert.
Je nach compiler und compilerflags ist der inhalt von stackvariablen und mallocspeicher undefiniert, 0 oder ein speicherschutzmuster (gedacht für den debugger, der dadurch erkennen kann, dass nicht initialisierte variablen verwendet werden, klappt natürlich nicht immer, aber recht oft).
mr.escape