Gamestudio Links
Zorro Links
Newest Posts
loading historical data 1st time
by AndrewAMD. 04/14/23 12:54
Trade at bar open
by juanex. 04/13/23 19:43
Bug in Highpass2 filter
by rki. 04/13/23 09:54
Adding Limit Orders For IB
by scatters. 04/11/23 16:16
FisherN
by rki. 04/11/23 08:38
AUM Magazine
Latest Screens
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Hecknex World
Who's Online Now
3 registered members (AndrewAMD, Grant, Neb), 908 guests, and 6 spiders.
Key: Admin, Global Mod, Mod
Newest Members
rki, FranzIII, indonesiae, The_Judge, storrealba
18919 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Empty Pointer Error - Brauche Hilfe! #297160
11/05/09 17:51
11/05/09 17:51
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Hallo Leute,

ich hab hier eine Action, bei der ich unter merkwürdigen Umständen einen Empty Pointer Fehler bekomme.
Hier mal etwas Code:
Code:
action alien1_1_act()
{
  while(1)
  {
    if(my.energie <= 0)
    {
      // ich bin hinüber
      [...]
      ent_remove(me);	// Mich selbst entfernen
      break;
    }
    else
    {
      [...]
      c_move(me, vector(5*my.geschwindigkeit*time_step,0,0), vector((-1*fluggeschwindigkeit)*time_step,0,0), (ACTIVATE_PUSH | USE_POLYGON | IGNORE_FLAG2)); // Drohne bewegen
      c_rotate(me, vector(-0.1*my.drehgeschwindigkeit*time_step,0,0), (ACTIVATE_PUSH | USE_POLYGON | IGNORE_FLAG2));
      my.roll = 5*my.drehgeschwindigkeit; // <- diese Zeile macht Probleme!
      [...]
    }
    wait(1);
  }
}

Dabei sind energie, geschwindigkeit und drehgeschwindigkeit Skillwerte. fluggeschwindigkeit ist eine globale Variable.

Wenn die Energie (skill1) der Entity auf <=0 herabgesetzt wird, bekomme ich die Empty Pointer Fehlermeldungen.
Gut, kann man sich dadurch erklären, dass irgendeine andere Entity versucht, auf den Pointer dieser Entity zuzugreifen.
Aber wenn ich die Zeile "my.roll = 5*my.drehgeschwindigkeit;" auskommentiere oder weglasse, funktioniert alles problemlos.

Jetzt meine Frage: Wie kann es sein, dass diese Zeile einen Empty Pointer Fehler verursacht? Noch komischer wird es dadurch, dass ich mehrere Empty Pointer Fehlermeldungen hintereinander bekomme. Wie kann das sein?

Dank und Gruß
derGarv


GameStudio Version: A7 Pro v7.86
Re: Empty Pointer Error [Re: garv3] #297199
11/05/09 23:06
11/05/09 23:06
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Ich hab inzwischen das Gefühl, dass es rein an der Anzahl der in der Action benutzten my/me-Pointer liegt.
Wenn ich weiter vorne in der Action (vor der while-Schleife) den my/me-Pointer noch mehrmals verwende (z.B. zum setzen von Flags), bekomme ich auch wieder die Empty Pointer Fehlermeldung.


GameStudio Version: A7 Pro v7.86
Re: Empty Pointer Error [Re: garv3] #297202
11/05/09 23:24
11/05/09 23:24
Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
Espér Offline
Expert
Espér  Offline
Expert

Joined: Mar 2008
Posts: 2,247
Baden Württemberg, Germany
Dann erstell nen lokalen pointer in der action
also..

Code:
action meine_aktion()
{
    ENTITY* ich_pointer = my;
    [...]
}



und verwende den statt my/me..
Vielleicht hilfts ja ^^


Selling my Acknex Engine Editions (A7 Com & A8 Pro):
>> click here if you are interested <<
Re: Empty Pointer Error [Re: Espér] #297205
11/05/09 23:38
11/05/09 23:38
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Das hab ich mir auch schon überlegt...
Hab es jetzt erstmal so gelöst, dass ich einige Zeilen zusammengefasst hab, so dass der Pointer seltener verwendet werden muss. Und jetzt geht's.
Komisch, komisch!


GameStudio Version: A7 Pro v7.86
Re: Empty Pointer Error [Re: garv3] #297577
11/08/09 14:42
11/08/09 14:42
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Die Frage, die sich jetzt stellt: Gibt es eine Beschränkung hinsichtlich der Häufigkeit, mit der ein Pointer aufgerufen werden darf?
Das würde ja sicher des Öfteren zu unerwarteten Fehlern führen!?


GameStudio Version: A7 Pro v7.86
Re: Empty Pointer Error [Re: garv3] #297885
11/10/09 14:53
11/10/09 14:53
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Bin nun wieder auf das Problem gestoßen.
Habe nun auch den Lösungsweg mit einem lokalen Pointer probiert. Leider crasht die Action dann immer an der entsprechenden Stelle.

Kann mir aber nicht denken, dass noch niemand das Problem hatte.
Hier mal die komplette Action:
Code:
action alien1_1_act()
{
	my.z = 0;
	my.material = mtl_specular;
	my.energie = 5;						// Energie der Drohne
	my.emask |= (ENABLE_PUSH);	// Die Drohne reagiert auf Schusstreffer
	my.event = alien1_1_event;		// Das Event der Drohne
	my.typ = gegner;
  	my.flags |= (POLYGON | FLAG2 | POLYGON | SHADOW | CAST);
  	var warInnerhalbSpielfeld = 0;
	while(1)
	{
		if(my.energie <= 0 || (istAusserhalbDesSpielbereichs(me) && warInnerhalbSpielfeld == 1))
		{
			if (anvisierterGegner == me)	// Falls die Drohne anvisiert ist (Sekundärwaffe)
			{
				vorigesZiel();	// Einen neuen Gegner rechts anwählen (falls noch mehr da)
				wait(1);			
				if(anvisierterGegner == me)	// Falls noch immer selbst anvisiert
				{
					naechstesZiel();	// neuen Gegner links anwählen (falls noch mehr da)
					wait(1);
					if(anvisierterGegner == me)	// Falls noch immer selbst anvisiert
						anvisierterGegner = NULL;	// keinen Gegner anvisieren
				}
			}
			if (anvisierterGegner2 == me)	// Falls die Drohne anvisiert ist (Sekundärwaffe)
			{
				naechstesZiel2();	// Einen neuen Gegner rechts anwählen (falls noch mehr da)
				wait(1);			
				if(anvisierterGegner2 == me)	// Falls noch immer selbst anvisiert
				{
					vorigesZiel2();	// neuen Gegner links anwählen (falls noch mehr da)
					wait(1);
					if(anvisierterGegner2 == me)	// Falls noch immer selbst anvisiert
						anvisierterGegner2 = NULL;	// keinen Gegner anvisieren
				}
			}
			if(!istAusserhalbDesSpielbereichs(me))
			{
				VECTOR* explodir;
				var i = 3+random(4);
				while (i>0){
					vec_set(explodir, vector(8-random(16),8-random(16),0));
					effect(explo1_effekt, 1, my.x, explodir);	// ...Explosion (Feuer)
					effect(explo1_smoke_effekt, 1, my.x, vec_normalize(explodir, vec_length(explodir)*0.6));	// ...Explosion (Rauch)
					feuerballEffekt(my.x);
					i--;
				}
				gegnerExploSound();
				setzePunkte(my.spieler,2);
				punkteffekt(2);
				if(tutorial_level != 1)
					erzeuge_item(munition_items*upgrades_items*energie_items, 3);
			}
			ent_remove(me);	// Mich selbst entfernen
			break;
		}
		else
		{
			if(my.x > spielfeldMaxX + 100)
			{
				my.x -= fluggeschwindigkeit*time_step;
			}
			else
			{
				alien1_1_hauptantrieb_duese();
				if(warInnerhalbSpielfeld == 0 && !istAusserhalbDesSpielbereichs(me))
				{
					warInnerhalbSpielfeld = 1;
				}
				c_move(me, vector(5*my.geschwindigkeit*time_step,0,0), vector((-1*fluggeschwindigkeit)*time_step,0,0), (ACTIVATE_PUSH | USE_POLYGON | IGNORE_FLAG2)); // Drohne bewegen
				c_rotate(me, vector(-0.1*my.drehgeschwindigkeit*time_step,0,0), (ACTIVATE_PUSH | USE_POLYGON | IGNORE_FLAG2));
				my.roll = 5*my.drehgeschwindigkeit;
				if(is(my, aggressiv))
				{
					if(random(1000) > 999)
					{
						ent_create("gegner_geschoss1.tga", my.x, gegner_geschoss1_action);	// Schießen
					}
				}
				if(sekundaerwaffe_freigegeben == 1 || sekundaerwaffe2_freigegeben == 1)
				{
					if (anvisierterGegner == NULL && !istAusserhalbDesSpielbereichs(me))	// Falls kein Gegner anvisiert (Sekundärwaffe) und Drohne auf Spielfeld
					{
						anvisierterGegner = me;	// Drohne anvisieren
					}
					if (neuesZielLinks == 1 && !istAusserhalbDesSpielbereichs(me)){	// Falls linker Gegner anvisiert werden soll und Drohne auf Spielfeld
						if(my.y > anvisierterGegner.y)	// Falls weiter links als anvisierter Gegner
						{
							if(neuerAnvisierterGegner != NULL)	// Falls schon ein potentieller neuer anvisierter Gegner
							{
								if (my.y < neuerAnvisierterGegner.y)	// Falls Drohne weiter links als potentieller neuer anvisierter Gegner
									neuerAnvisierterGegner = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
							else	// Falls noch kein potentieller neuer anvisierter Gegner
							{
								neuerAnvisierterGegner = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
						}
					}
					if (neuesZielRechts == 1 && !istAusserhalbDesSpielbereichs(me)){	// Falls rechter Gegner anvisiert werden soll und Drohne auf Spielfeld
						if(my.y < anvisierterGegner.y)	// Falls weiter rechts als anvisierter Gegner
						{
							if(neuerAnvisierterGegner != NULL)	// Falls schon ein potentieller neuer anvisierter Gegner
							{
								if (my.y > neuerAnvisierterGegner.y) 	// Falls Drohne weiter rechts als potentieller neuer anvisierter Gegner
									neuerAnvisierterGegner = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
							else	// Falls noch kein potentieller neuer anvisierter Gegner
							{
								neuerAnvisierterGegner = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
						}
					}
					
					if (anvisierterGegner2 == NULL && !istAusserhalbDesSpielbereichs(me))	// Falls kein Gegner anvisiert (Sekundärwaffe) und Drohne auf Spielfeld
					{
						anvisierterGegner2 = me;	// Drohne anvisieren
					}
					if (neuesZielLinks2 == 1 && !istAusserhalbDesSpielbereichs(me)){	// Falls linker Gegner anvisiert werden soll und Drohne auf Spielfeld
						if(my.y > anvisierterGegner2.y)	// Falls weiter links als anvisierter Gegner
						{
							if(neuerAnvisierterGegner2 != NULL)	// Falls schon ein potentieller neuer anvisierter Gegner
							{
								if (my.y < neuerAnvisierterGegner2.y)	// Falls Drohne weiter rechts als potentieller neuer anvisierter Gegner
									neuerAnvisierterGegner2 = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
							else	// Falls noch kein potentieller neuer anvisierter Gegner
							{
								neuerAnvisierterGegner2 = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
						}
					}
					if (neuesZielRechts2 == 1 && !istAusserhalbDesSpielbereichs(me)){	// Falls rechter Gegner anvisiert werden soll und Drohne auf Spielfeld
						if(my.y < anvisierterGegner2.y)	// Falls weiter rechts als anvisierter Gegner
						{
							if(neuerAnvisierterGegner2 != NULL)	// Falls schon ein potentieller neuer anvisierter Gegner
							{
								if (my.y > neuerAnvisierterGegner2.y) 	// Falls Drohne weiter rechts als potentieller neuer anvisierter Gegner
									neuerAnvisierterGegner2 = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
							else	// Falls noch kein potentieller neuer anvisierter Gegner
							{
								neuerAnvisierterGegner2 = me;	// Drohne wird potentieller neuer anvisierter Gegner
							}
						}
					}
				}
			}
			wait(1);
		}

	}
}


Das Problem tritt in der Zeile "feuerballEffekt(my.x);" auf.

Ist das ein Bug oder hab ich einen Fehler gemacht?

Dank und Gruß
derGarv


GameStudio Version: A7 Pro v7.86
Re: Empty Pointer Error [Re: garv3] #298068
11/11/09 18:51
11/11/09 18:51
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
Habe festgestellt, dass das Problem auch auftritt, wenn der my pointer in durch die action aufgerufenen funktionen benutzt wird.

Das kann ja irgendwie nicht sein!?


GameStudio Version: A7 Pro v7.86
Re: Empty Pointer Error [Re: garv3] #298145
11/12/09 14:15
11/12/09 14:15
Joined: Jan 2005
Posts: 605
Deutschland, NRW
G
garv3 Offline OP
User
garv3  Offline OP
User
G

Joined: Jan 2005
Posts: 605
Deutschland, NRW
I replaced all my/me pointers in functions called by this action with local pointers. But still no luck. I get crashes and Empty Pointer exeptions for this action again and again. Sometimes even the whole engine crashes...

If someone would be willing to help me, I'd send him/her the code! I'm so desperate...

-----

Ich hab nun alle my/me Pointer in Funktionen, welche von dieser Action aufgerufen werden, durch lokale Pointer ersetzt. Aber immer noch keine Besserung. Ich bekomme immer wieder Crashes und Empty Pointer Exeption Meldungen für diese Funktion. Manchmal stürzt auch die gesamte Engine ab....

Wenn jemand bereit ist mir zu helfen, schicke ich ihm/ihr gerne den Code. Ich bin echt verzeweifelt!

EDIT:
Solved! Gelöst!
It was just "VECTOR* explodir;". Has to be "VECTOR explodir;" *g*
War einfach nur "VECTOR* explodir;". Es muss "VECTOR explodir;" sein *g*

Last edited by garv3; 11/12/09 16:38.

GameStudio Version: A7 Pro v7.86

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1