Forum: Mikrocontroller und Digitale Elektronik sizeof eines allocierten Speichers


von Josef K. (zumlin)


Lesenswert?

Hallo

ich hab da ein kleines Problem, bzw eine Frage. Ich möchte gerne die 
Anzahl der Structs in einem Structarray herrausfinden.
Ich hab leider momentan die Hardware nicht zur Hand zum testen.
Also prinzipiell funktioniert das ganze so (über das Programm verteilt):
1
//ist irgendwo mal definiert
2
typedef struct{                                  
3
  uint16_t  time;       
4
  uint16_t  address;                   
5
  uint64_t  *data;
6
  uint8_t    datalength;
7
}can_messageblock_typedef; 
8
9
//lege ich mal irgendwo an
10
can_messageblock_typedef  *can_messages_struct;
11
can_messages_struct = realloc(can_messages_struct,reservedbytes);
12
13
//irgendwann schreib ich da auch mal was rein
14
can_messages_struct[line].time = 1; //...
Jetzt das Problem. Ich möchte später mal wieder gerne die Anzahl der 
"lines" wissen. Ich würde das wie folgt lösen, aber mit 
sizeof(can_message_struct) werd ich ja nur die Größe des Pointers 
erhalten. Wie bekomme ich die Größe eines allozierten Speichers heraus?
1
anzlines = sizeof(can_message_struct)/sizeof(can_messageblock_typedef);


Das Problem hatte ich schon einmal. Damals habe ich das mit einer 
Terminierung "gelöst", die ich dann wieder leicht finden konnte. Aber 
geht das nicht auch anders?

von (prx) A. K. (prx)


Lesenswert?

Geht nicht. In die struct reinschreiben, oder in eine metastruct, die 
ansonsten aus einem array of struct besteht.

sizeof(can_message_struct) ist übrigens die Grösse eines Pointers.

von Vlad T. (vlad_tepesch)


Lesenswert?

nein.
sizeof liefert dir die größe einer struktur zurück.
sizeof(irgend_ein_pointer); gibt dir halt die größe der Pointervariablen 
zurück.

da hilft nur selbst mitzählen.

dynamische allozierungen haben nix auf kleinen µCs verloren.
wenn die keine mmu haben, ist es wie russisches Roulette. irgendwann 
passiert etwas, nur man weiß nicht wann.

von Josef K. (zumlin)


Lesenswert?

Dachte ich mir schon fast. Dann muss ich mir die Zahl hald irgendwo 
ablegen.
Das mit dem Allozieren hab ich auch schon schmerzhaft erfahren. Versuche 
das daher so oft wie es geht zu vermeiden, aber manchmal muss man.... ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.