Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

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
Autor Wiadomość
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:
C/C++
typedef struct zmienna_typ {
    /* Inne pola z danymi */
    int lwymiarow; /* Liczba wymiarów danych */
    size_t * wymiary; /* Długość kolejnych wymiarów */
    char * nazwa; /* Nazwa */
    void * dane; /* Bufor danych zmiennej */
}

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:
C/C++
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ź.
P-175175
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 binarny

Nie wydaje mi się, że poprawnie przedstawiłeś co się tam dzieje w kodzie.
P-175176
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ć.

P-175179
« 1 »
  Strona 1 z 1