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.