07. november 2003 - 19:24Der er
20 kommentarer og 1 løsning
brug af delete
Jeg har følgende situation //denne funktion kaldes mange gange void functiona(Obj o) { int a[o.array.lenght()]; for(........) { kopier elementer fra o.array til a } kald en funktion med a function2(a)
}
function2(int a[], int l) { int b[len] for(.....) { kopier fra a til b } }
Håber i kan forstå situationen. Mit spørgsmål er ->
1) Giver det et memoryleak da a jo ikke bliver deleted 2) Hvis det gør skal jeg så blot kalde delete a[]?
Hvis vi ser bort fra obskuriteter såsom rekursive kald der ikke returnerer som de skal, så kræver en memory leak dynamisk allokering uden matchende deallokering.
I C++ er det meget typisk new uden delete. Man kan dog også i C++ bruge C funktionerne malloc og free.
Du kan nemt detecte en memory leak. Du studerer bare hvordan memory forbruget udvikler sig. Task Manager i windows. Hvis memory forbruget vokser konstant indtil det nærmer sig total memory så er det en leak.
arne_v >> du mener selvfølgelig a allokeres på stack'en, ikke heap'en...
conrad >> er der nogen speciel årsag til at du kopierer alt indholdet? Det er jo netop kun lokalt for funktionerne, så jeg forstår ikke helt hvad du får ud af det..?
Obj indeholder et array. Et nyt objekt af en anden type skal oprettes med en kopi af dette array. Det var lidt hurtigt skrevet eksempel- function2 er min constructor
jpk>> Jeg kan godt se det ikke er helt smart den eksempel kode jeg har fåt skrevet. Den rigtige kode, som svarer til function2 ser således ud:
ACKData::ACKData(int aid,nsaddr_t r[],int rl, Time sat) { this->ackid = aid;//id of this ACK this->route_l = rl;//lenght of array //do some copying here for(int i = 0; i < rl; i++) { this->route.push_front(r[i]); } this->sendat=sat;//time we send this ACK }
Jeg tror jeg startede med at have et array, hvor jeg blev nødt til at gemme længden. Senere har jeg skiftet til list og så er det da rigtigt at det er unødvendigt.
Synes godt om
Ny brugerNybegynder
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.