mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik sizeof eines allocierten Speichers


Autor: Josef Kkk (zumlin)
Datum:

Bewertung
0 lesenswert
nicht 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):
//ist irgendwo mal definiert
typedef struct{                                  
  uint16_t  time;       
  uint16_t  address;                   
  uint64_t  *data;
  uint8_t    datalength;
}can_messageblock_typedef; 

//lege ich mal irgendwo an
can_messageblock_typedef  *can_messages_struct;
can_messages_struct = realloc(can_messages_struct,reservedbytes);

//irgendwann schreib ich da auch mal was rein
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?
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?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Josef Kkk (zumlin)
Datum:

Bewertung
0 lesenswert
nicht 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.... ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.