[c++] hoe runtime een dynamische array vergroten *

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
hoi ik ben ff een programma aan het maken dat uit 5 lijsten alle mogelijke compbinaties maakt.

coureur1 ,21combinaties
coureur2 .idem
chassis ,11combinaties
bandentype ,combinaties
motor, 11 combinaties

hier moet ik dus me array steeds bij elke nieuwe combinatie vergroten, alleen ik heb tot nu toe alleen met statishe array's gewerkt op school met c++.. dus ik weet niet precies hoe ik die array runtime moet vergroten..

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Naast malloc en free e.d. heb je ook realloc (ik geloof dat die functie zo heet)

Zoek maar eens in je docs naar reallocate, dan kom je de goede functie voor jouw doel wel tegen. Deze functies bewaren allemaal zoveel mogelijk van de bestaande informatie overigens.

Professionele website nodig?


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

.ers

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
moet je dynamisch alloceren. Stel je hebt een array van longs, dan maak je eerst een voorlopige array aan,
code:
1
long *blaat = new long[10];

Nu heb je een array voor 10 longs... moet je er een bij maken, dan maak je eerst een temp array aan, van 10 + 1. Kopieer je de inhoud van de vorige array naar de nieuwe en delete je de oude en vervolgens laat je de originele variabele wijzen naar de nieuwe (temp dus).
code:
1
2
3
4
5
6
7
8
9
10
long Amount = 10;
long *Blaat = new long[Amount];
// vul array
long *Temp = new long[Amount + 1];
if( Blaat)
{
  memcpy( Temp, Blaat, Amount); // copy old array
  delete[] Blaat;
}
Blaat = Temp;

nu heb je een nieuwe array Blaat die eentje groter is dan de originele... moet zo werken, of ik doe weer eens een keer wat stoms :)

edit: Bug opgelost ;)
-- nu vraag je je zeker af hoe ik in zo'n klein k*t stukkie nog een fout kan maken... gelijk heb je :'(

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Of je gebruikt een std::vector.

  • THIJZEL
  • Registratie: Januari 2001
  • Niet online
thnx, alleen ik kwam in dit programma te veel moeilijkheden tegen met c++.
ik doe het nu dus maar met delphi....

Verwijderd

Op zondag 10 februari 2002 20:05 schreef _Mo_ het volgende:
code:
1
2
long *Blaat = new long[Amount];
delete Blaat;
Om arrays te delete'n gebruik je delete[] in plaats van delete.

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zondag 10 februari 2002 20:36 schreef Sneech het volgende:

[..]

Om arrays te delete'n gebruik je delete[] in plaats van delete.
ach ja, dat was ik dus vergeten :) mijn excuses :)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

En hoe delete ik nou een 2d array?

array is alsvolgt gedeclareerd: int array[10][160];

Hoe geeft ik dus het geheugen ruimte weer vrij?

Verwijderd

Op woensdag 06 maart 2002 16:33 schreef bmx_grover het volgende:
En hoe delete ik nou een 2d array?

array is alsvolgt gedeclareerd: int array[10][160];

Hoe geeft ik dus het geheugen ruimte weer vrij?
Staat op de 'heap' dus die hoef je niet vrij te geven. :)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op woensdag 06 maart 2002 16:36 schreef Richardve het volgende:

[..]

Staat op de 'heap' dus die hoef je niet vrij te geven. :)
Ja alleen dan net andersom :) dit is op de stack. Dynamisch geheugen (met new) staat op de heap.

Verwijderd

Op woensdag 06 maart 2002 16:44 schreef Orphix het volgende:

[..]

Ja alleen dan net andersom :) dit is op de stack. Dynamisch geheugen (met new) staat op de heap.
Dat bedoelde ik eigenlijk ook :)
ik haal die 2 altijd door elkaar..

Verwijderd

Je moet gebruik maken van een Linked List. Deze maakt ook gebruik van malloc. Ik kan zo van buiten geen voorbeeld ff intypen.
Als je een voorbeeld programma hierover wilt hebben dan zou ik als ik jou was even bij www.gamedev.net kijken. Hier staan verschillende goede voorbeeld programma's en uitleg over Linked Lists.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 11-09 18:38
Op woensdag 06 maart 2002 20:14 schreef thing_70 het volgende:
Je moet gebruik maken van een Linked List. Deze maakt ook gebruik van malloc. Ik kan zo van buiten geen voorbeeld ff intypen.
Nou nee. De enige linked list die standaard in C++ zit
is std::list< >, en die maakt gebruik van een Allocator != malloc().

Bovendien is een linked list geen array; je kunt bv niet snel element N vinden.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

vector dan maar? dynamisch groeien, snelle toegang tot alle elementen, veel handige methoden.

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 12-09 23:01
Op zondag 10 februari 2002 20:01 schreef curry684 het volgende:
Naast malloc en free e.d. heb je ook realloc
Je gebruikt zelf nooit stl spul ? Ik weet dat je er nix op tegen hebt om c functies te gebruiken in c++, maar dit gaat toch wel wat ver vind ik.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Nieuwe vragen kunnen in nieuwe threads.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1

Dit topic is gesloten.