Variables Array
-
Ach ja die Zugriffsverletzung wird von
delete[] person;
ausgelöst!
-
Ohje, eine uninitialisierte Variable
Ich nehme an, du willst
int position = 0; // wichtig!
Außerdem kannst du ruhig wie bei normalen Arrays indizieren, also
person[i] = false; // leserlich
statt
*(person+i) = false; // imho unleserlich
gruß,
walker
-
Sorry! Iss korrekt is mir auch grad aufgefallen!!!
-
gez hab ich eine beim beenden?!!!!
-
Hi,
der Fehler ist, daß Du den Bereich deines Arrays nicht beachtest.
1. Du initialisierst 'position' nicht. dort kann alles möglich drinstehen.
2. Wenn Du Deine Funktion mit
abzaehlen(8,6);
aufrufst.
erster Schleifendurchlauf wenn position durch zufall doch 0 ist:position += Silb;
dann ist position 6 und person[6] gibts.
da ist noch alles im grünen Bereich
zweiter Durchlauf:position += Silb;
danach ist position 12 und das macht bei einem Array mit 8 Elementen:
PPP EEEE N N GGGG P P E NN N G PPP EEE N NN G GG P E N NN G G P EEEE N N GGGG
(mein erstes ASCII-Art, Kritiken sind nicht gefragt
)
grüße Con@n
-
Hinweis am Rande:
*(person+position) = false; uebrig--;
kannste aus dem if-Block nehmen, da es eh in if UND else ausgeführt wird - wäre übersichtlicher IMHO.
-
GoTo schrieb:
Ach ja die Zugriffsverletzung wird von
delete[] person;
ausgelöst!
Wie wird der Speicher korrekt freigegeben ?
'delete person;' löscht ja nur das erste Element des char arrays.
-
die Klammer [] nach delete löscht doch das ganze array!
-
Unter Windows gibt übrigens auch "delete person;" den Speicher des gesamten Arrays frei - was es allerdings nicht richtiger macht.
edit
Ich meinte damit zumindest VC++6 SP5...
-
Stimmt, der VC ist da nicht wirklich konsequent. Habe ich ganz früher auch nicht verstanden, was die eckigen Klammern da sollen wenn es auch ohne geht.