Article View: be.comp.programming
Article #6883Re: [C++] array verdubbelen in grootte
From: Slayerke
Date: Fri, 08 Nov 2002 12:48
Date: Fri, 08 Nov 2002 12:48
46 lines
2855 bytes
2855 bytes
astone wrote:
> 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;
> }
>
> 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]'
>
> 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
>
>
Een variabele van het type array is een constant pointer, daar kun je geen
nieuwe waarden aan geven. Je doet er beter aan gewoon een pointer te
gebruiken:
Element* elementen=new Element[100];
In je destructor dan wel geen delete[] elementen; vergeten.
Een array moet je ook niet vrijgeven, die wordt automatisch vrijgegeven, dus
je moet in die code die je gebruikt om te kopieren ook met pointers werken
en via de new-operator, anders ga je een pointer naar een vrijgegeven blok
geheugen teruggeven, wat gaat resulteren in garbage of segfaults.
--
Groeten,
Slayerke
Technical Details
Message-ID:
<moOy9.10704$Nd.3263@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-04!supernews.com!newshosting.com!news-xfer1.atl.newshosting.com!newsfeed.icl.net!newsfeed.fjserv.net!news-lond.gip.net!news.gsl.net!gip.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<MPG.1835b759f3ac0beb98971b@news.pandora.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,bb472599d65044ed X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-11-08 05:12:21 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-04!supernews.com!newshosting.com!news-xfer1.atl.newshosting.com!newsfeed.icl.net!newsfeed.fjserv.net!news-lond.gip.net!news.gsl.net!gip.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail From: Slayerke <slayerkenospammer@slayerke.co.uk> Subject: Re: [C++] array verdubbelen in grootte Newsgroups: be.comp.programming Reply-To: slayerkenospammer@slayerke.co.uk References: <MPG.1835b759f3ac0beb98971b@news.pandora.be> Lines: 46 User-Agent: KNode/0.7.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7Bit Message-ID: <moOy9.10704$Nd.3263@afrodite.telenet-ops.be> Date: Fri, 08 Nov 2002 12:48:18 GMT NNTP-Posting-Host: 213.224.102.133 X-Complaints-To: abuse@telenet.be X-Trace: afrodite.telenet-ops.be 1036759698 213.224.102.133 (Fri, 08 Nov 2002 13:48:18 MET) NNTP-Posting-Date: Fri, 08 Nov 2002 13:48:18 MET Organization: Telenet Internet