c - dynamiczna tablica wskaźników na struktury

0

Witam, chciałbym się dowiedzieć czy mój kod prawidłowo tworzy dynamiczną tablicę wskaźników na struktury oraz czy jest to jej prawidłowe użycie bez wyjeżdżania po za zaalokowaną pamieć tzn. wyciek pamięci.

Tworzenie dynamicznej tablicy wskaźników na struktury

struct Test
{
	double d;
};

const int iSize = 10;

struct Test **myTest = (Test**)malloc(iSize * sizeof(Test*));

for (int i = 0; i < iSize; i++)
{
	myTest[i] = (Test*)malloc(sizeof(Test)); //dla każdego wskaźnika - jedna alokacja struktury
}

Czy prawidłowo obliczam rozmiar zaalokowanej pamięci, czyli 320 bajtów?

//8 bajtów to rozmiar struktury
//10 * 4 * 8 = 320
printf("size: %d\n", iSize * sizeof(Test*) * sizeof(Test)); // = 320

Czy pierwszy kod przypisywania wartości nie wyjeżdża po za rozmiar zaalokowanej pamięci? (Ten, według mnie jest OK)

 //obie instrukcje są równoważne
myTest[0]->d = 54321.0; //wskaznikiem
myTest[0][0].d = 54321.0; //zmienną

Czy drugi kod przypisywania wartości nie wyjeżdża po za rozmiar zaalokowanej pamięci? (Ten, według mnie wyjeżdza, no czyli jest zjawiskiem wycieku pamięci) - lecz nie ma zjawiska crasha/wysypania się programu.

myTest[0][1].d = 54321.0;

I jak prawidłowo się to formułuje:
Dynamiczna tablica wskaźników na struktury czy Dynamiczna tablica wskaźników struktur? A może jeszcze inaczej?

Chciałbym się dowiedzieć czy mój tok rozumowania jest prawidłowy.

0

Ad 1. Nie, 10 * (4 + 8) = 120
Ad 2. Tak
Ad 3. Tak
Ad 4. Dynamiczna tablica wskaźników na struktury

0

Jeżeli korzystasz w linuxa(nie wiem jak to jest na winie) to polecam valgrind - służy do sprawdzania czy z pamięcią wszystko jest ok :)

0

Dlaczego 10 * (4 + 8)?

A jeżeli zrobię coś takiego

iSize = 10;
for (int i = 0; i < iSize; i++)
{
    myTest[i] = (Test*)malloc(14 * sizeof(Test));
}

To rozmiar zaalokowanej pamięci ile będzie wynosił?

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