Dynamiczna alokacja do wskaźnika na kilkuelementową tablicę

Dynamiczna alokacja do wskaźnika na kilkuelementową tablicę
gambitek9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

Z pewnych względów nie mogę posłużyć się akurat int** i alokacją w pętli do poszczególnych wskaźników i przydałby mi się taki znany z C(chyba!) sposób dynamicznej alokacji "dwuwymiarowych" tablic (tylko tym razem z new, a nie mallociem).

Kopiuj
int (*arr) [size] = new int [size] [size];

Niestety nie mam pojęcia, ani nie mogę znaleźć w internecie odpowiedzi jak zwolnić tak przydzieloną pamięć. Próbowałem delete [] arr oraz delete arr, ale valgrind zawsze wypisuje "2 allocs, 1 frees". W C wystarczyło zrobić free(arr) z tego co pamiętam, gdy pamięć była tak przydzielana. A może nie powinienem przypisywać wyniku new int[size][size], do takiego wskaźnika?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2

jak używasz C++ to używaj C++:

Kopiuj
vector<vector<int>> tb(size,vector<int>(size));

elwis
  • Rejestracja: dni
  • Ostatnio: dni
2

W C nie możesz od razu zaalokowac tablicy i tablic w jej elementach. W C, jeśli nie chcesz pętli, alokujesz jedną dużą tablicę i tłumaczysz indeksy:

Kopiuj
int *tab = malloc (w*h);

// Element x,y

tab[x+y*w]

W C++ też można tak zrobić, popieram jednak sugestię odnośnie vectora, chyba że masz dobry powód żeby tego nie robić. Jednak sądząc po poście, nie masz. :P

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.