[C++] [pekare] Får segmenterings fel.

Permalänk
Medlem

[C++] [pekare] Får segmenterings fel.

Hej, jag igen...

I alla fall:
Jag har ett litet problem:
när jag försöker ge en funktion en pekare till ett spel objekt kan jag använda det i den funktionen, men när jag försöker skicka objektet vidare till en annan funktion från den funktionen så får jag och försöker använda det objektets funktioner (typ player->getX() ) så får jag segmenterings fel på grund av att jag får en referens till 0x0 (noll adressen, dvs ingen tingen).

vad kan det här bero på?

(Vet inte hur det är med att få utomstående hjälp när man går på högskola, så jag vågar inte riktigt lägga upp min kod).

men säg att vi har fyra klasser: game, logic, objectPlayer och gameObjects. (objectPlayer ärver från gameObjects)
I game har jag en pekare till en objectPlayer*.
I logic har jag två funktioner: itterateObjects(objectPlayer player*):void som ittererar igenom en vector med gameObjects och jämför med player, samt itteratorHelper(gameObjects obj1*,gameObjects obj2* ):boolean .

I game (som körs när man startar spelet) så körs:

objectPlayer *player = new objectPlayer(); logic Logic = new logic(); //skapar en instans av klassen logic Logic.itterateObjects(player);

i itterateObjects():

<kod som ittererar genom en vector> if(itteratorHelper(ObjectFromVector , player){ printf("the value is true! \n"); }

itteratorHelper:

if(obj1->getX() < obj2->getX()){ return true; } else { return false; }

Det är i jämförelsen här som allt går åt hellvete... jag får en noll pekare från obj2 (dvs den som pekar på player)...
men kör jag samma jämförelse i itterateObjects() så får jag inte det.

What gives?
[/code]

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem

Fungerar verkligen getX() som du tror (används alltid basklassens funktion och variabler, eller har gameObjects någon egen implementation som stör)? För övrigt känns det som att det saknas stjärnor och liknande här och var, men jag antar att den riktiga koden fungerar.

Edit: eller var det alltså obj2 som var 0?

Permalänk
Medlem

oh just det... det har jag i koden..

itteratorHelper((*ObjectFromVector) , player) skall det juh vara...

med om jag lägger till en stjärna på player får jag:
ingen känd konvertering för argument 2 från "gameObjects" till "gameObjects*"

/me rages

EDIT:
ja det var det
obj2 pekar på 0x0
EDIT2:
eller inte obj2 i sig utan obj2->getX()

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Hedersmedlem
Skrivet av Gego:

med om jag lägger till en stjärna på player får jag:
ingen känd konvertering för argument 2 från "gameObjects" till "gameObjects*"

funktionen väntar sig en pekare och om player definieras som ovan bör det inte vara någon stjärna där. Vad objectFromVector innehåller framgår inte vad jag kan se, men om det är en pekarpekare verkar det bra med en stjärna; annars inte (kompilatorn brukar dock vara bra på att märka när man gör konstigt, och det verkar ju inte vara där problemet finns).

Skrivet av Gego:

eller inte obj2 i sig utan obj2->getX()

Kraschen uppstår alltså någonstans i getX()? Kan man, när player initieras, köra både
player->getX();
och
((gameObjects*)player)->getX();
utan krasch (och, antar jag, till och med med samma svar)?

Permalänk
Medlem
Skrivet av Elgot:

funktionen väntar sig en pekare och om player definieras som ovan bör det inte vara någon stjärna där. Vad objectFromVector innehåller framgår inte vad jag kan se, men om det är en pekarpekare verkar det bra med en stjärna; annars inte (kompilatorn brukar dock vara bra på att märka när man gör konstigt, och det verkar ju inte vara där problemet finns).

Kraschen uppstår alltså någonstans i getX()? Kan man, när player initieras, köra både
player->getX();
och
((gameObjects*)player)->getX();
?

Ja båda fungerar.... men inte I hjälpar klassen...

Kanske skall posta hjälpar klassen?

Kanse är något fel på Gold Länkaren?

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem

Använd en debugger och stega igenom programmet.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem
Skrivet av MagnusL:

Använd en debugger och stega igenom programmet.

Jag använde GDB för att komma fram till att jag får en 0x0 referens...

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem
Skrivet av Gego:

med om jag lägger till en stjärna på player får jag:
ingen känd konvertering för argument 2 från "gameObjects" till "gameObjects*"

Testat att byta obj2->getX() till obj2.getX()?

Permalänk
Medlem
Skrivet av veggie_d:

Testat att byta obj2->getX() till obj2.getX()?

Kan inte använda "." på en pekare... g++ vill inte äns ha det.

skall sätta lite break points i koden för att se om det kan hjälpa mig att hitta felet.

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem

Om det skulle hjälpa er att hjälpa mig så här är lite traces:

Här är min strace:
http://paste.ubuntu.com/771432/

min ltrace (nog inte så viktig):
http://paste.ubuntu.com/771434/

min etrace:
http://paste.ubuntu.com/771437/

Jag vet inte hur man skall utläsa något av dem dock.

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem

Ok ignorera mig, det är bara jag som är dum i huvudet...

jag använde en felaktig vector för att kolla om det var slutet på vectorn...

inte bra när man har flera vektorer.... ^_^
skall nog lägga ihop dem till en...

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix