[Error] Memory could not be read

11/23/2013 02:35 Doktor.#1
Hey, hab jetzt schon alle Möglichkeiten aus Google versucht, aber nichts hat geholfen.
Hoffe ihr könnt weiterhelfen, der Code:

Code:
Object *object1;
Object *object2;
Object *object3;
Object *object4;

int main()
{

while(1)
{
//Hier kommt es irgendwann zum Memory Fehler
object1 = NTMap->getAll(hprog, mobs);
object2 = NTMap->getAll(hprog, players);
object3 = NTMap->getAll(hprog, items);
object4 = NTMap->getAll(hprog, npcs);

//Augabe.....{}
//
//
//


delete[] object1 ;
delete[] object2;
delete[] object3;
delete[] object4 ;
}
return 0;
}
Das ganze Programm läuft einwandfrei, außer eben das es nach einer bestimmten Zeit crasht und der Fehler kommt "Memory could not be read".

Weis zufällig jemand wie man diesen Fehler umgehen kann, bzw. wodurch der ausgelöst wird?
11/23/2013 02:42 Schlüsselbein#2
Was sagt dee Debugger? Was machen die Funktionen etc.?
11/23/2013 02:50 Doktor.#3
Der Debugger sagt nichts dazu, das Programm startet ganz normal.

object1 = NTMap->getAll(hprog, mobs);
object2.....
enthalten danach die Mobs etc. Namen auf der momentanen Map von einem Game, die dann ausgegeben werden.
11/23/2013 09:51 MrSm!th#4
Jemand sollte ein Tutorial für ordentliches Debuggen veröffentlichen..
11/23/2013 14:38 Doktor.#5
Dann mach du doch so'n Tutorial, anstatt Posts zu posten die einem nicht mal wirklich weiter helfen.
11/23/2013 17:18 Padmak#6
Deine Fehler helfen aber auch nicht wirklich weiter, du hast eigentlich keinen Fehlerrelevaten Code gepostet. Gibt NTMap::getAll immer valide werte zurück oder können die auch mal 0 sein?
Ich weiß nicht was du für Antworten haben willst, aber das ist nunmal Sache des Debuggens

Übrigens scheint der Code nicht allzu hübsch zu sein, solltest dir vllt mal Gedanken machen

Padmak
11/23/2013 18:19 Doktor.#7
Ja, ist eine Library, enthält alle nötigen Funktion und klassen und der Wert kann (bin mir grad nicht ganz sicher, muss es noch testen) 0 sein, wenn ich grad die Map wechsel.

Das der Code nicht so ganz schön ist, ist ja auch klar, da dies oben nicht der richtige Code ist, sondern nur der Ausschnitt wo der Absturz stattfindet.
11/23/2013 21:52 Delinquenz#8
Quote:
Das der Code nicht so ganz schön ist, ist ja auch klar, da dies oben nicht der richtige Code ist, sondern nur der Ausschnitt wo der Absturz stattfindet.
Sofern du uns nicht die "Object" Klasse und die Klasse der Variable NTMap zeigst, können und werden wir dir nicht helfen.

Wir sind keine Hellseher.
11/24/2013 03:02 Padmak#9
Quote:
Originally Posted by ~Wystan View Post
und der Wert kann [...] 0 sein, wenn ich grad die Map wechsel.
Teste jeden Pointer vorm delete, ob der auch wirklich nicht null ist. Außerdem: sicher, dass es ein Array ist? Wenn's nur ein Objekt ist, das per new alloziiert wurde: delete statt delete[]

Padmak
11/24/2013 18:53 Nightblizard#10
Quote:
Originally Posted by Padmak View Post
Teste jeden Pointer vorm delete, ob der auch wirklich nicht null ist.
Das ist unsinn. delete nullptr; ist wohldefiniert und verursacht keine Probleme.
Siehe:
[Only registered and activated users can see links. Click Here To Register...]

@TE:
Du solltest dir RAII zu Gemüte führen (bzw. die Finger gleich von Pointer lassen), dann passieren solche Zugriffsfehler nicht.
11/24/2013 19:53 Tasiro#11
Siehe [new.delete.single]/14:
Quote:
Default behavior: If ptr is null, does nothing. Otherwise, reclaims the storage allocated by the earlier call to operator new.
11/24/2013 20:39 MrSm!th#12
Das Problem ist eher, einen bereits gelöschten Pointer (oder einen anderweitig ungültigen Adresswert) zu löschen.
11/24/2013 23:27 Nightblizard#13
Was auch ganz interessant ist, ist dass er die einzelnen Objekte mit delete[] löscht. Aufgrund der Benennung schaut das ersteinmal falsch aus, aber er kann auch einfach nur mit den Namen geschlampt haben (das getAll lässt dann nämlich doch eher auf ein Array schließen..).
Mehr spuckt die Glaskugel im Moment nicht aus, muss sie wohl mal wieder neu aufladen. Alternativ solltest du uns mehr Code zeigen, bzw. wie die anderen sagten mit nem Debugger durch das Programm laufen.