Tablice dynamiczne - co gdy brak delete, zerowanie, kopiowanie

Tablice dynamiczne - co gdy brak delete, zerowanie, kopiowanie
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:26
0

Witam
Mam pytanie dotyczące tablicy dynamicznej.

  1. int *tab1 = new int[rozmiar]; Co jeżeli nie usunę danych z pamięci za pomocą delete?
  2. Można skopiować wartości jednej tablicy dynamicznej do drugiej w jakiś bardziej efektowny sposób niż pętla (np. for) i iteracja po każdym elemencie tablicy?
  3. W jaki sposób można wyzerować (lub chyba też wynNULLować) całą tablicę w szybszy sposób niż for(...) tab[i] = 0;? Bo typy int przy deklaracji przyjmują ciężkie do przewidzenia wartości.
  4. Jaką wartość początkową będzie miał każdy z elementów tablicy bool?
    Pozdrawiam
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2
  1. To pamięć jest zaalokowana przez twój program aż się nie zakończy.
  2. memcpy
  3. memset
  4. losową, co więcej bardzo losową :D bo bool ma 1 bajt więc losowa "wartość" może być w zakresie 0-255

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
Zobacz pozostałe 17 komentarzy
LI
Aha, po poprawieniu zwracało 363. A do czego się odnosił ten w if warunek (bo nie było zmiennej tab_bool)?
_13th_Dragon
Czy nie zerowy adres tablicy. Sam możesz takie rzeczy sprawdzać używając: http://en.cppreference.com/w/cpp/language/typeid
LI
Dzięki, a ten komentarz pod postem niżej? Z tablicą dwuwymiarową?
_13th_Dragon
Pytania tam są tak bezsensowne że nie zamierzam na nie odpowiadać, poza tym pytania się zadaje w postach nie komentarzach.
LI
Ok, ale dlaczego bezsensowne? Napiszę post.
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:12 dni
1
Kopiuj
memset(tab,0,size*sizeof(int));

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:26
0

To jak już nazwałem temat "tablice dynamiczne ...", to jak wysłać taką tablicę do funkcji:

Kopiuj
 int **tab_x = new int *[5];
    for ( int i = 0; i < 5; ++i )
        tab_x[i] = new int [size];

Przy tablicy jednowymiarowej starczyło: void funkcja1(int tab1[])

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:12 dni
2
Kopiuj
void funkcja1(int **tab,unsigned Height,unsigned Width)

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
LI
Jeżeli przesyłam 3 argumenty, to skąd kompilator wie, że Height i Width odnosi się do tablicy tab?
_13th_Dragon
Kompilator tego nie wie, programista musi wiedzieć.
LI
Ale zrobiłem tak : cout << tab[1][2] << endl; i działa. W takim razie po co wys i szer?
_13th_Dragon
Aby nie musiałeś pisać osobną funkcje dla tablicy o wymiarze 6x6 a jeszcze inną dla wymiaru 7x7 a na dodatek ... ... ...
LI
Aha, w znaczeniu, że gdybym np. iterował po elementach tablicy, tak? Bo sama tablica zadziała bez tych 2 unsigned? Edycji dokonanych na tej tablicy dokonuję również na "oryginale" z funkcji main, bo to wskaźnik (w sumie na wskaźnik), prawda?
LI
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:26
0

Zapytałem się (bo tak się domyślam), czy Height i Width są potrzebne, np. do iteracji w pętlach for. Czy gdyby funkcja potrzebowała tylko int **tab, to wypisanie stałych elementów (które znam, np. [1][2] - wiem, że tam coś jest) działałoby. W związku z tym, iż jest to wskaźnik (a nawet dokładniej tablica wskaźników na tablicę, tak?) funkcja dokonywałaby edycji "na oryginalnej tablicy" skąd wywoływana jest funkcja? Bo, gdy prześlę int'a jako argument, tworzy się w funkcji nowa zmienna, tak? Ale, gdybym przesłał już wskaźnik, to tworzy się tam tylko nowy wskaźnik wskazujący na miejsce, gdzie jest dana zmienna/obiekt, a więc dojdzie do edycji "globalnej", tak?

_13th_Dragon
Największa bezsensowność tych pytań polega na tym że sprawdzenie tego zajmie max 2 min, zadałeś te pytania w komentarzach godzinę temu. Wciąż nie sprawdziłeś? Tak i będziesz o każdą pe...nięcie na forum smarować?
LI
To sobie sprawdzę, natomiast odpowiedź doświadczonej osoby może przynieść kilka dodatkowych informacji oraz wyjaśnienie, np. dlaczego coś może być/wydawać się bezsensowne. Nie sprawdziłem tego od razu, gdyż teraz piszę coś innego (dosyć małego, dla siebie), a i tak mam niezły bałagan jak na razie w kodzie itd. Mogę powiedzieć, iż wydaje mi się, że na każde z powyższych pytań poprawna odpowiedź to tak, ale jeśli chodzi o sprawdzenie w praktyce, to raczej zrobię to później.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.