usuwanie pamięci dyn

0

hi,
powiedz ktos madry czy dajac
int *Tab;
delete (Tab+n);
faktycznie skasuje pamiec przydzielona elementowi numer n?
aha wczesniej alokowalem pamiec uzywajac realloc
no i czemu jak dalem
delete Tab[n]; to bład przy kompilowaniu
przeciez jak daje
int temp = Tab[n]; to smiga

0

Źle rozumujesz.

int *Tab;

to wskaźnik na element typu int.

więc jeśli utworzysz dynamicznie tablicę:

Tab = new int[10];

to aby ją skasować napiszesz tak:

delete[] Tab;

To co Ty napisałeś:

delete Tab[n];

zadziała, jeśli elementami tablicy będą wskaźniki, czyli musiałoby być tak:

int **Tab;
Tab = new int*[10];
for (int i=0; i<10; i++)
 Tab[i] = new int[5];

i teraz pisząc:

delete Tab[n];

gdzie 0<=n<10 zwolniłbyś pamięć przydzieloną n-temu elementowi tablicy wskaźników Tab.

Mam nadzieję, że się nie machnąłem i że wszystko jest jasne.

0

ano racja, teraz to widze
czyli jesli dobrze zrozumialem to jak dam
delete (Tab+n);
to wtedy skasuje mi pamiec pod adresem Tak+n;// taK?

0

czyli jak dam
delete (Tab+n);
to wtedy skasuje mi pamiec pod adresem Tab+n; //Tak?

Wtedy zwolnisz pamięć wskazywaną przez n-ty wskaźnik w tablicy Tab.

1 użytkowników online, w tym zalogowanych: 0, gości: 1