Status_access_violation Fehler
-
Plürr schrieb:
Dynamisch Speicher reservieren und?
Hast du es dir nochmal angesehen?
-
Ja, gerade eben. Nur muss ich sagen, dass ich nicht gerade der Champ in
dingen wie Arrays und malloc, calloc oder realloc bin.
Muss man nicht zuvor mit malloc oder calloc arbeiten um danach realloc zu benützen?
-
Plürr schrieb:
Ja, gerade eben. Nur muss ich sagen, dass ich nicht gerade der Champ in
dingen wie Arrays und malloc, calloc oder realloc bin.
Muss man nicht zuvor mit malloc oder calloc arbeiten um danach realloc zu benützen?Nein muss man nicht umbedingt, wenn man einen NULL Pointer übergibt verhält realloc sich wie malloc.
Beim schnellen durchlesen fällt auf dass du die Größe des zu reservierenden Speichers nicht erhöhst. realloc hat also beim zweiten Durchlauf keinen Effekt mehr.
-
Hmmm...
daten = realloc(daten, x * sizeof 80);
Leider kann ich im mom keinen Debugger hernehmen, da meine IDE paar Probleme hat.
-
Okay, ich hab es nun mit
daten = realloc(daten, x * sizeof 8);
Und es funktioniert auch so, nur der Ausgabewert ist nochnicht das richtige.
-
Plürr schrieb:
Und es funktioniert auch so, nur der Ausgabewert ist nochnicht das richtige.
D.h., es funktioniert eigentlich nicht?
Warum sizeof 8? Warum nicht sizeof(struct Daten)?
-
Naja fast, eher
sizeof(struct Daten)
.sizof 80
würde im besten Fall 4 für einenint
liefern, falls das überhaupt geht. Nach Adam Ries wären es bei dir aber trotzdem immer noch 120 Bytes für eine Struktur.
-
Es war lediglich ein Versuch, dass es überhaupt eine Ausgabe gibt.
Sag du mir bitte warum es mit (struct Daten) nicht funktioniert.
Eine Erklärung hab ich dazu leider nicht.
-
Was funktioniert mit struct Daten nicht? sizeof sollte dir zuverlässig deine 120 zurück liefern. Mach doch einfach mal zum Test ein printf und lasse dir den Wert ausgeben. Wenn du dann immer noch skeptisch bist, kannst du auch einfach deine 120 fest rein schreiben. Das gibt nur dann Probleme, wenn die Struktur mal eine andere Größe haben sollte. Beispielsweise wenn char plötzlich 2 Byte groß ist, oder du merkst dass 39 Zeichen doch ein wenig eng sind.
-
Das Problem ist, am Anfang war es ja (struct Daten), nur da kam ja dann immer
als Ausgabe nur der "status_access_violation" Fehler raus.
-
Okay, *hust* wie durch ein "Wunder" funktioniert es jetzt komischerweise mit "struct Daten".
-
fällt euch eigentlich noch etwas ein wie man die "Software" automatisch auf Fehler testen lassen kann? Gibt es da irgendeinen Programmschnipsel, oder irgendwelche bestimmte Funktionen die sich dafür gut eignen?
-
Plürr schrieb:
Okay, *hust* wie durch ein "Wunder" funktioniert es jetzt komischerweise mit "struct Daten".
Das entscheidende war das
x *
Plürr schrieb:
Gibt es da irgendeinen Programmschnipsel, oder irgendwelche bestimmte Funktionen die sich dafür gut eignen?
Wenn du mit solchen Konstrukten Probleme hast, solltest du vielleicht eine Programmiersprache wählen, die solche Fehler während der Laufzeit abfängt, wie Java.
-
Nein, das nicht. Aber ich würd gerne mal so etwas in der Richtung mal gerne sehen.
Es ist immer nützlich so einen Test dafür zu haben.
Außerdem, hab ich Java auch schon etwas "Einsteigererfahrungen".
-
Oder C++ !
-
Standard C bietet assert an, daneben auch perror.
-
Plürr schrieb:
void clearbuf() { setvbuf(stdin,NULL,_IONBF,0); setvbuf(stdin,NULL,_IOFBF,BUFSIZ); }
Was ist denn das schon wieder? setvbuf macht keine rückwirkenden Aktionen auf den Stream. Es muss doch schwierig sein, nach den hier schon mehrfach genannten standardkonformen und funktionierenden Varianten zu suchen.
-
Das ist die "schönere" Variante zu fflush(stdin), da (soweit ich weiß)
fflush() unvorhergesehene Dinge hervorrufen kann.
-
fflush ist nicht standardkonform, sprich undefiniert, wenn man es mit Nicht-Outputstreams aufruft.
Deine Lösung ist nicht viel besser.