Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

Speicherzugriffsfehler in C

Massafagga / 7 Antworten / Flachansicht Nickles

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

bei Antwort benachrichtigen
mr.escape Massafagga „Er hatte damit die zugriffsfehler bei einfuegen erzeugt. Aber ich war wirklich...“
Optionen
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
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Nochmal danke! Massafagga