Article View: be.comp.programming
Article #6885Re: [C++]
From: Dominique Devriese
Date: Fri, 08 Nov 2002 14:59
Date: Fri, 08 Nov 2002 14:59
78 lines
3912 bytes
3912 bytes
astone writes:
> in een poging een eigen template 'rij' te schrijven ben ik op een
> probleem gestoten. om een of andere reden slaag ik er niet in een
> array te doen verdubbelen in grootte. het betreft dit stuk code :
> template <class Element> void rij<Element>::verdubbelArraygrootte()
> {
> arraygrootte*=2; Element nieuwe_array[arraygrootte]; for (int
> i=0; i<aantal_elementen; i++) {
> nieuwe_array[i] = elementen[i];
> } delete [] elementen; elementen = nieuwe_array;
> }
hallo,
je moet die code eens herlezen, en goed beseffen wat je aan het doen
bent.
Hier is een klein equivalent met int's in plaats van arrays, en zonder
templates:
class integer
{
int oude_int;
public:
void verdubbel();
};
void integer::verdubbel()
{
int nieuwe_int;
nieuwe_int = oude_int;
&oude_int = &nieuwe_int;
};
Ik hoop dat je begrijpt wat je allemaal fout doet:
1. een array is intern wel een pointer, en op sommige momenten kan je
het gebruiken als zodanig, maar je kan de interne pointer _niet_
naar een andere array laten wijzen. Als je dat wil moet je
rechtstreeks met pointers werken...
2. nieuwe_array is een array die wordt gecreerd waar hij gedeclareerd
wordt, en die verdwijnt wanneer hij uit scope verdwijnt. Als je
hem daarna nog probeert te gebruiken, heb je gegarandeerd een
segmentatiefout.. ( nu ja, je compiler mag technisch gezien ook
code genereren die een maanraket lanceert, want het is
"ongedefinieerd" gedrag... ). Als je wil dat je de array erna nog
wilt gebruiken, moet je hem "dynamisch" alloceren, dwz. met new.
3. elementen is ook statisch gealloceerd. Die hoort namelijk bij de
klasse rij. Als je hem probeert te delete [] n, heb je weer iets
ongedefinieerd. Vuistregel: delete _enkel_ dingen die je zelf met
new gealloceerd hebt.
> elementen[] is als volgt geinitialiseerd: Element elementen[100]; op
> de laatste regel geeft gcc mij steeds de volgende melding wanneer ik
> probeer te compilen met rij<int> :
> incompatible types in assignment of `int[((rij<int>::arraygrootte -
> 1) + 1)]' to `int[100]'
kmoet wel zeggen dat de error niet erg duidelijk is, maar toch.. ;)
> kan iemand me helpen en eventueel ook uitleggen waarom dit niet
> werkt? het zal waarschijnlijk iets erg eenvoudigs zijn, maar ik vind
> het echt niet.
> wie de rest van de code wil zien, kan terecht op
> http://www.mooo.be/test/code.txt
misschien toch dat hoofdstuk over geheugen-allocatie eens herlezen in
je C++ boek ? ;)
sjuus
domi
--
Don't you feel more like you do now than you did when you came in?
Technical Details
Message-ID:
<877kfohztt.fsf@appel.kotnet.org>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-04!supernews.com!newsswitch.lcs.mit.edu!newsfeed.cwix.com!newsfeed.icl.net!newsfeed.fjserv.net!syros.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mailReferences:
<MPG.1835b6dd3f596487989719@news.pandora.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,f6684f073b8deade X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-11-08 08:56:04 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-04!supernews.com!newsswitch.lcs.mit.edu!newsfeed.cwix.com!newsfeed.icl.net!newsfeed.fjserv.net!syros.belnet.be!naxos.belnet.be!news.belnet.be!not-for-mail From: Dominique Devriese <dominique.devriese@student.kuleuven.ac.be> Newsgroups: be.comp.programming Subject: Re: [C++] Date: 08 Nov 2002 15:59:42 +0100 Organization: KULeuvenNet Lines: 78 Sender: domi@appel Message-ID: <877kfohztt.fsf@appel.kotnet.org> References: <MPG.1835b6dd3f596487989719@news.pandora.be> NNTP-Posting-Host: seven.kulnet.kuleuven.ac.be Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: naxos.belnet.be 1036767655 10790 134.58.127.12 (8 Nov 2002 15:00:55 GMT) X-Complaints-To: abuse@belnet.be NNTP-Posting-Date: Fri, 8 Nov 2002 15:00:55 +0000 (UTC) User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Common Lisp) Cache-Post-Path: seven.kulnet.kuleuven.ac.be!unknown@domi.kotnet.org X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/)