Programmieren - alles kontrollieren 4.937 Themen, 20.662 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 „Speicherzugriffsfehler in C“
Optionen

Neue elemente in liste dürfen keine stackvariablen sein. Statt
struct Student aktu;
muss es
struct Student *aktu;
aktu=(struct Student *)malloc(sizeof(struct Student));
/*hier eigentlich noch eine fehlerbehandlung für den fall aktu==NULL*/

heißen (für malloc() und co. ist u.u. ein extra #include<malloc.h> bzw. #include<stdlib.h>erforderlich). Damit wird zudem aus
actu.???
jeweils
actu->???
Zudem hätte es statt
scanf("%d", aktu.matrikel);
auch
scanf("%d", &aktu.matrikel);
heißen müssen, denn bei scanf wird die adresse der variablen angegeben. In der malloc-version wird es also zu
scanf("%d", &aktu->matrikel);
Durch das allozieren mit malloc() wird es nötig, nach gebrauch die einzelnen elemente wieder freizugeben (z.b. in main())
for (i=0;i<ANZ;i++)
{
  struct list *kill;
  if((kill=liste.start)==NULL)/*zuweisen und ende wenn liste zu früh leer*/
    break;
  liste.start=liste.start->next;/*erstes element heraustrennen*/
  free(kill);/*herausgetrenntes element freigeben*/
};


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