Usuwanie tablicy dynamicznej.

0

Witam. Otóż natknąłem na pewien problem. Podczas usuwania tablicy dynamicznej zostaje zastąpiony tylko pierwszy element tablicy liczbą 0. Mógłby mi ktoś powiedzieć czy to jest normalne czy może nie? I jak zrobić żeby usunęło całą tablicę a nie tylko jeden element.

#include <iostream>

using namespace std;
#define SIZE 5

void wypiszTablice(int tab[], int rozmiar);
int *stworzTablice(int elements[], int rozmiar);
void usunTablice(int tab[]);

int main()
{
	int arr[SIZE] {1,2,3,4,5};
	int *sTablice = stworzTablice(arr, SIZE);

	wypiszTablice(sTablice, SIZE);

	usunTablice(sTablice);

	wypiszTablice(sTablice, SIZE);


	return 0;
}




void wypiszTablice(int tab[], int rozmiar)
{
    for(int i = 0; i < rozmiar; i++)
	{
		cout << "tab[" << i << "] = " << tab[i] << "\n";
	}
}

void usunTablice(int tab[])
{
	delete[] tab;
}

int *stworzTablice(int elements[], int rozmiar)
{
	int *tab = new int[rozmiar];

    for(int i = 0; i < rozmiar; i++)
	{
		tab[i] = elements[i];
	}

	return tab;
}

2

Absoloutnie nie masz nic do gadania apropos tego co się dzieje z tablicą po jej zwolnieniu, bo to nie twój zasób.

2

Po zwolnieniu tablicy odwoływanie się do niej - może nawet doprowadzić do zawieszenia/usunięcia programu przez system - przynajmniej w teorii - po zwolnieniu to nie jest już Twoja pamięć i może tam być wszystko - w zależności od potrzeb i konstrukcji systemu.

4

Hej,
usuwanie całej tablicy byłoby bardzo nieefektywne- zerowanie wszystkich bitów w dużych tablicach zajmowałoby masę czasu- kompletnie zbędnie!
Zamiast tego zaznacza się jedynie, iż obszar który wcześniej był zajęty (np następne 20 bajtów) od tej pory jest wolny i czeka się na jego nadpisanie :)

Podobnie masz na kompie, stąd czasem można odzyskać skasowane pliki jeżeli nikt ich jeszcze nie nadpisał. (Tak w uproszczeniu)

1

@Piwniczne Często tak się dzieje, ale to nie jest standard, zależy to od systemu operacyjnego i jego potrzeb oraz użytego alokatora wykorzystanego w bibliotece standardowej danego kompilatora. Tak samo jest z odzyskiwaniem plików, zależy od filesystemu, są takie, gdzie nie odzyskasz (np przy niektórych partycjach szyfrowanych - względy bezpieczeństwa) :)

0

Dzięki za odpowiedzi :) Myślałem że jak usunę tablicę to wszystkie elementy znikną i wartości będą wynosić 0.

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