30. november 2003 - 19:06Der er
13 kommentarer og 1 løsning
Hvordan returneres et Int Array oprette på heapen?
Hej Eksperter;
Jeg arbejder i MS visual St. 1.0 C++ 6.0
Jeg kan ikke itererer igennem et int array som er oprette i en anden metode? (arrayet er oprettet på heapen) På første plads kan jeg få værdien ud, men går en jeg en plads frem går programmet ned?
Lidt uddrag af min kode lidt simplificeret:
//Metode som returner int arrayet, (Nedarvet metode)
virtual int* findPladser(Stol& s){ //eks int o = 2, v = 7, h = 5; int* fundnePladser = new int[3];
Tak for din hurtige reaktion. Ja der mangler en slut } men den har jeg med i den "rigtige metode". Found er for ikke at løbe alle tre pladser igennem - er ikke nødvendigt. Jeg er nybebynder med C++, så der nok en hel del som kunne være skrevet bedre, men her er hele den modtagne metoden:
bool kontrollerKrav(Stol& s) { bool found = true;
Person& personKrav = s.getPerson().getPersonKrav(); if (&personKrav == NULL) return true;
int *personPL = s.getBord().findPladser(s);
int i = 0; while( i < 3 && found) { if(s.getBord().getStol(personPL[i])->getPerson() == personKrav ) { found = false; } else { i++; } } //Sletter int array som er blevet skabt på Heapen, i metoden findPladser(Stol& s) delete[] personPL;
return found; }//End kontroller krav
Problemet er lige så snart i bliver talt en op personPL[i] - så er der ingen værdi på næste plads i arrayet - som jeg kan se det får jeg kun en pointer til første plads i arrayet og kan ikke komme til plads nr 2 - personPL[i=1] Og lige så snart i antager værdien 1 - går programmet ned selv om jeg har lagt værdier ind på 3 pladser i arrayet ???
Det er jeg sikker på da jeg kun indsætter 3 værdier i arrayet i den medtoden som opretter arrayet, som du kan se i findPladser metoden. Du "angriber" ikke min kode, jeg havde forvnetet at jeg havde skrevet noget forkert og derfor fik jeg ikke arrayet med over. Ser det umiddelbart "brugbart" ud den kode som er lavet??
// se test nedenfor. Person& personKrav = s.getPerson().getPersonKrav();
// hmm, &personKrav giver adressen på variablen personKrav så det giver aldrig NULL?!? if (&personKrav == NULL) return true;
int *personPL = s.getBord().findPladser(s);
int i = 0; while( i < 3 && found) { // har vi hvad vi tror printf("PL[%d]=%d\n", i, personPL[i]); if (s.getBord().getStol(personPL[i]) == NULL) printf("getStol == NULL\n"); if(s.getBord().getStol(personPL[i])->getPerson() == personKrav ) { found = false; } else { i ; } } //Sletter int array som er blevet skabt på Heapen, i metoden findPladser(Stol& s) delete[] personPL;
return found; }//End kontroller krav
// Hvor mange warnings for du for : Person& test() { return NULL; }
Tak begge to - ja I havde ret, min fejl - der var en fejl som gav en null pointer reference i person, nu virker det :-) Jeg havde stirret mig blind på det int array fordi jeg forventede, jeg havde skrevet en forkert syntaks. Tak for hjælpen!! Det er første gang jeg har stillet et spørgsmål i dette forum. Hvordan lukker jeg det korrekt?
Ok det vil jeg gøre - jeg sidder faktiske og prøver om jeg kan læse mig frem til hvordan det her foregår (savner en Q&A, om åbne og især lukke spørgsmål og point regnskab hvordan det hænger sammen) men det er måske meget logisk bygget op når man først kommer ind i det.
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.