Avatar billede smirnoff Nybegynder
24. november 2004 - 02:52 Der er 4 kommentarer og
1 løsning

Pointer til pointer til Object

Hej Eksperter...

Jeg bliver nødt til at vide hvad jeg gør forkert i denne kode:

        /* liste som pointer til pointer til object */
        Object** liste;   
   
    /* Lad pointeren på *tal pege på et array af 100 int */
    *liste = new Object[100];
    int i=0;
   
    /* test object */   
    Object* obj = new Object();
   
    while(i<t) {
                /* overfør obj til listen */
        liste[i] = obj;
        i++;
    }
   
   
    i = 0;
    while(i++<t)
        cout << liste[i]->toString() << endl;
   
    delete liste;
    delete obj;   

koden er kun test .. meningen er at jeg skal kunne overføre et Object som reference til min liste i en funktion som jeg har lavet i et andet program, derfor opretter jeg en pointer (obj) ved while løkken som simulerer den funktion. Det hele handler om at lægge referencer i en liste mere eller mindre dynamisk - og jeg ved jeg bare burde lave en linket liste, men jeg er blevet stædig mht til at lave dette array fordi:

Jeg tviler nemlig på jeg overhovedet har fattet begrebet pointer til pointer... som jeg forstår det...

Object** liste;
*liste = new Object[100];

.. så er (liste) en pointer til (*liste) som er pointer til arrayet af Objekter ( liste -----> *liste -----> Object array )

Er det rigtigt?

.. desuden resulterer ovenstående program i en segmentation fault .. så jeg går udfra det er noget memory allokering som jeg gætter på hænger sammen med min pointer gymnastik...
Avatar billede arne_v Ekspert
24. november 2004 - 07:18 #1
*liste = new Object[100];

skal vel være

liste = new (Object*)[100];

?
Avatar billede smirnoff Nybegynder
24. november 2004 - 11:44 #2
Jeg har rodet lidt med det - og denne kode virker:

int tal = 400;
    Object** liste;
    liste = new (Object*)[tal];
   
    Object* test = new Object();
   
   
    int i = 0;
   
    while(i<tal)
        liste[i++] = test;
   
    i = 0;
    int k=0;
    while(k<tal) {
        cout << "nr: " << k << " " << liste[k]->toString() << endl;
        //liste[k] = 0;
        k++;
    }
       
    *liste = 0;   
    return 0;

- så du har ret :-)

.. men kan du forklare mig hvorfor ... det er jeg nemlig ikke helt med på ?

er det fordi jeg har initialiseret array'et et forkert 'sted' så at sige ved brugen af *liste = new Object[100] - eller hur ??

Bare smid et svar så du kan få dine point :-)
Avatar billede arne_v Ekspert
24. november 2004 - 11:50 #3
*liste = new Object[100];

svarer til

liste[0] = new Object[100];

d.v.s. at den sætter det første element i et ikke initailiseret array af pointere til
at pege på et array med 100 elementer.

liste = new (Object*)[100];

sætter en pointer til pointer til at pege på 100 nyallokerede pointere som
så siden kan sættes til at pege på objekter
Avatar billede arne_v Ekspert
24. november 2004 - 11:50 #4
svar
Avatar billede smirnoff Nybegynder
24. november 2004 - 17:09 #5
Alletiders  ... jeg er med ... tak for det :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester