Rzutowanie danych na strukturę - prośba o wyjaśnienia działania przydziału danych do pól struktury
Ostatnio zmodyfikowano 2019-09-09 19:50
Daractive Temat założony przez niniejszego użytkownika |
Rzutowanie danych na strukturę - prośba o wyjaśnienia działania przydziału danych do pól struktury » 2019-09-09 03:49:52 Witam. Analizuję bibliotekę do czytania zmiennych z pliku o zapisie binarnym (pliki .mat z Matlaba). Dane o zmiennej zawierają się w strukturach zdefiniowanych w następującej strukturze: typedef struct zmienna_typ { int lwymiarow; size_t * wymiary; char * nazwa; void * dane; }
Funkcja czytająca dane po ustaleniu że w polu "dane" zmiennej "danazmienna" znajduje się tablica komórek (która jest interpretowana w tym formacie plików jako tablica zmiennych tego samego typu strukturalnego "zmienna_typ") dokonywane jest następujące rzutowanie: zmienna_typ ** komorki =( zmienna_typ ** ) danazmienna->dane;
Po dokonaniu tego rzutowania funkcja dla kolejnych elementów tablicy "komorki" dokonuje manipulacji traktując elementy tablicy jako pełnoprawne zmienne typu strukturalnego, manipulując zawartością poszczególnych pól etc. I tutaj pojawia się problem. O ile rozumiem sam fakt że poprzez porównanie wskaźników dokonujemy interpretacji buforu "dane" jako kolejnych zmiennych, nie rozumiem jak zachodzi samo rzutowanie. W jaki sposób w takim przypadku dane przydzielane są do pól struktury? Szczególnie iż zarówno sama definicja typu strukturalnego jak i funkcja wydają się nie deklarować w żaden konkrety sposób tego przydziału. Z góry dziękuje za odpowiedź. |
|
pekfos |
» 2019-09-09 18:09:22 Struktura ma jakąś swoją reprezentację w pamięci i rzutowaniem wskaźników możesz potraktować blok pamięci tak, jak gdyby był tam obiekt struktury. Przydział danych do pól wychodzi sam z siebie. Nie jest to bynajmniej bezpieczna operacja. Zapis binarnyNie wydaje mi się, że poprawnie przedstawiłeś co się tam dzieje w kodzie. |
|
Daractive Temat założony przez niniejszego użytkownika |
» 2019-09-09 19:50:33 Wydaje mi się że może to być coś w tym rodzaju biorąc pod uwagę że w większości przypadków układ danych w "dane" jest albo definiowany w innych funkcjach, albo wartości pól struktur są sprawdzane (przynajmniej te, które da się w miarę sensownie sprawdzić). A co do ostatniego, który fragment wydaje się niepoprawny? Jeżeli mowa o ostatnim, to jest to możliwe, biorąc pod uwagę że jest to jedynie moja interpretacja "na logikę". Jeżeli problem znajduje się w innym miejscu to mogę spróbować sprecyzować.
|
|
« 1 » |