Invalid Heap Pointer found / Bad dynamic Heap Objects found

Status
Nicht offen für weitere Antworten.

ma-games.de

Mitglied
Wie kommt unter der J2ME (MIDP 1.0 und CLD 1.0, Nokia UI) ein Absturz des Programms mit folgender Fehlermeldung zustande?
Invalid Heap Pointer found
Bad dynamic Heap Objects found
Ich habe ein kleines Spiel für Handys programmiert, und manchmal stürzt das Spiel einfach ab. Angezeigt wird dann nur eine der zwei Fehlermeldungen. Es passiert sporadisch, also zu keinem bestimmten Zeitpunkt oder "Ort", und sehr selten. Könnte das auch durch eine fehlerhafte Implementierung mit der VM zu tun haben, oder liegt das Problem bei mir?

Beim "googlen" habe ich als einzige Antwort folgendes gefunden:
http://www.gamedev.net/community/forums/topic.asp?topic_id=205339
Dort weiß aber anscheinend auch niemand Antwort auf die Frage. Das einzige was ich daraus entnehmen kann ist, das es nicht unbedingt am Nokia UI API liegt.
 
R

Roar

Gast
hmm ich kenn mich mit der J2ME zwar kein bisschen aus aber vielleicht hilft dir es ja :?
der Heap ist ja ein speicher. wär es möglich dass du falsche objekte in den speicher schreibst, oder den speicher irgendwie überfüllst? obwohl ich denke dass das eher eine sache der VM ist.
 

tomkruse

Bekanntes Mitglied
Hi!

Also für mich klingt das so, als wäre es ein Bug in der internen Speicherverwaltung der KVM. Man hat ja als Programmierer gar keinen Einfluß darauf, wie der Heap verwaltet wird. Alles was man machen kann ist, Objekte anlegen und wieder auf null setzen.

Manchmal wird der Heap zu klein und die KVM glaubt trotzdem noch, daß genügend Speicher zur Verfügung steht. Instanziert man dann ein Objekt, so kommt bei Nokia die Meldung "unable to run application". Dieses Szenario kann man umgehen indem man selbst den GarbageCollector mit Sytem.gc() aufruft.

Aber einen "invalid heap pointer" kann man selbst nicht durch Nachlässigkeit verursachen. Da muß irgendwas anderes passiert sein.

Cu - Tom.
 

ma-games.de

Mitglied
Vielen Dank für Eure Meinungen. An einer Überfüllung des heap liegt es nicht. Dann würde entweder "unable to run application" oder "out of memory error" als Meldung kommen. Ich habe im Netz noch folgendes interessantes gefunden:
Bad dynamic Heap Objects found
I have seen this error before when I was using the Runtime.date()
function in the KVM. It took me a week to isolate the problem to
Runtime.date() because it is a bug in the underlying code (behind the
KVM). If you are using this function, this is probably the cause.

If you are not, you have probably uncovered a new bug in the KVM
implementation. My intuition is that this message is an indicator of
buffer overruns or other pointer-type errors typical in C/C++
development. Any of you out there familiar w/ C/C++ development know
what I'm talking about - it's the equivalent of a core dump. This is why
the KVM is still not released - these VM implementation issues need to
be worked out completely.

Jeff Gibson

P.S. Javasoft, let's get these fixed so we can move on :)

Michael Kroll wrote:

> Hi,
> does anybody know what this error means?
>
> Is this a kind of heap overflow?
>
> Thanks.
>
> --
> Bye,
> Michael Kroll

Es scheint also das in der Entwicklungsphase von J2ME (die Mail-Wechsel stammt von 1999) schon solche Probleme gab und es wahrscheinlich an der KVM liegt.
Aber es wäre nicht schlecht wenn jemand genau bescheid wüßte.
 

tomkruse

Bekanntes Mitglied
Hi!

Aber es gibt ja auch nicht DIE KVM, oder? Ich meine, die verschiedenen Hersteller haben doch auch verschiedene KVMs?!

Cu - Tom.
 

ma-games.de

Mitglied
Ja, das stimmt natürlich. Ich habe auch schon gehört das im Siemens API ein fehler sein soll. Und im ersten Link den ich angegeben habe, haben die Leute dort ja auch mit Siemens Handys Probleme.
 

tomkruse

Bekanntes Mitglied
Hi!

Ich glaube nicht, daß die Siemens API nur EIN Problem hat *g*
Da gips z.B. den berühmten switch-bug. Wenn man ein switch-case Konstruckt macht in dem positive und negative Werte gemischt sind, dann verweigert der indevice-Verifyer und behauptet "error verifiing class".

cu - Tom.
 

tomkruse

Bekanntes Mitglied
Hi!

Hm. Das hab ich auch, aber diesen Fehler hatte ich noch nie. Aber oft entstehen solche Fehler durch eine unglückliche Aneinanderreihung von Ereignissen, auf die auch die Entwickler der KVM beim Testen nie und nimmer draufkommen.

Cu - Tom.
 

flateric

Neues Mitglied
hi ma-games!

benutzt du DirectGraphics.FLIP_HORIZONTAL oder ähnliches?
und hast du grafiken die über einen gesetzten setClip hinausragen? (z.b. einen hintergrund 128x128) auf dem objekte sind, die teilweise darüber hinausragen?
ich hatte das gleiche problem mit einem 6610. die parameter der setClip routine werden bei älteren s40 anscheinend falsch gesetzt. sie ist um einen pixel größer als angegeben. das habe ich zumindest festgestellt. nachdem ich einige anpassung gemacht habe hatte ich den fehler nicht mehr. es schien mir so als würde ein sprite in "fremden" speicher kopiert allerdings nur dann wenn ich mit DirectGraphics.FLIP (usw...) gearbeitet habe.

gruß
flateric
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben