Archief - [PROG]C++ probleempje met pointers

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Banemus

Legacy Member
ok dus ik maak elke keer een nieuwe pointer aan naar een object en dan steek ik die pointer in een array van pointers

(publieke variabele)
Bullet *pBullet;
Buller *Bullets = new Bullet[100];

(lokaal)
pBullet = new Bullet(int, int, int, int);

//
Bullets = *pBullet;


maar als ik dus 2 keer nadenk verdwijnt mijn eerst bullet na een tijdje van het scherm dus doe ik.
delete Bullets;



dus nu wil ik graag die "i" van "delete Bullets" terug gebruiken .... hoe kan ik checken of Bullets bestaat? zodat ik geen array van 10000000 moet maken om veel kogels te knallen

ik heb geprobeert met if (Bullets == NULL){}

maar dan geeft ie een compile fout

kheb ook dit geprobeert

*pBullet = Bullets;
// if(pBullet == NULL){}
maar dan wil ie ni verder op da stuk want hij vind het niete ofzo "*pBullet = Bullets;"


houd er rekening mee er zijn nog wel wat meer loops en fors gebruikt maar ik heb te veel code gebruikt om dat hier even te pasten

KeaTs

Legacy Member
Je probleem is dat je array geen array van pointers is, maar een array van objecten zelf. Als je

Bullet *pBullet;
Buller *Bullets = new Bullet[100];

(lokaal)
pBullet = new Bullet(int, int, int, int);

//
Bullets = *pBullet;

doet, dan geef je in de laatste lijn geen pointer door, maar kopieer je je object in de array. k Vind het al raar dat delete Bullets werkt trouwens.

Doe iets als:

Bullet* Bullets[ 100 ];

Bullets = new Bullet( int, int, int, int );

en om te deleten:

delete Bullets;
Bullets = NULL;

om later te checken:

if ( Bullets == NULL ) {}

zal deze keer wel werken omdat Bullets nu een pointer is en geen object.

Veel succes!

kwitters

Legacy Member
Emotions zei:

Aiaiai! Probeer arrays zoveel mogelijk te vermijden in C++, want arrays are evil!

Neem eens een kijkje in STL container classes zoals vector, stack, queue, deque, ... . Deze zullen je veel beter helpen met je probleem, aangezien je dan eenvoudig enkel het geheugen kunt gebruikt dat je echt nodig hebt.

KeaTs

Legacy Member
[6.15] What does the FAQ mean by "such and such is evil"?

It means such and such is something you should avoid most of the time, but not something you should avoid all the time.

Laat m eerst de klassieke fouten maken, hij zal een veel beter inzicht krijgen in alles. ( En uiteindelijk uiteraard stl of custom containers gebruiken ;) )

killgore

Legacy Member
KeaTs zei:
Laat m eerst de klassieke fouten maken, hij zal een veel beter inzicht krijgen in alles. ( En uiteindelijk uiteraard stl of custom containers gebruiken ;) )

²

Pointers, geheugenbereik en zo zijn vrij belangerijk in c++, dan is het wel nuttig om ze te leren en arrays zijn daar een goed middel voor.

Maar daarna volg ik ook dat artikel : arrays are evil.
Gebruik de std container klasses (of maak uw eigen containers als ge der reden toe ziet :)).

Banemus

Legacy Member
ja maar arrays vermijden ging even niet in deze situatie ... heb geen zin om 30 verschillende bullets te maken voor 1 gun en gebruik ik liever even een array om die bullets creatie overzichtelijker te maken

Psychokillah

Legacy Member
Emotions zei:
ja maar arrays vermijden ging even niet in deze situatie ... heb geen zin om 30 verschillende bullets te maken voor 1 gun en gebruik ik liever even een array om die bullets creatie overzichtelijker te maken

Dat neemt nog steeds niet weg dat je beter een STL container kan gebruiken he ... :wtf:
Maar goed, uit fouten leert men.

Banemus

Legacy Member
mja kwil niet te ver voor lopen op de leerstof want kzit nu mss al 5 weken voor bezig en heb geen zin om nu veel bij te leren van c++ dus houd ik het wel even bij ongezonde dingens :d
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan