Ich habe die folgende Struktur:Wie berechne ich zur Laufzeit den maximal erlaubten Wert vor dem Datentyp Rollover?
uint32_t size = sizeof(Some_Struct) + sizeof(Other_Struct) * n;
Meine Frage ist, da ein sizeof
Some_Struct und Other_Struct tatsächliche Größe ist abhängig, die auf dem:
struct Some_Struct {
uint32_t a;
int16_t b;
uint8_t c;
};
struct Other_Struct {
uint32_t a;
uint32_t b;
uint32_t c;
};
Die variable Größe als solche berechnet wird Plattform, Architektur und Verpackung, wie kann ich zur Laufzeit die maximale Anzahl von n
erlaubt vor size
rollt über bestimmen?
"als Angabe [0] ist nicht definiert." - Das stimmt nicht ganz. Verwenden Sie ein _flexibles Array member_: 'Other_Struct e []'. Dieser '[1]' Hack ist Legacy und ruft undefiniertes Verhalten in modernen C auf. – Olaf
Dies wird nur von C99 unterstützt. C++, das markiert ist, unterstützt auch keine flexiblen Array-Mitglieder. – Zhro
Mit den obigen Notizen denke ich es ist Zeit, die Frage noch einmal zu stellen, ist dies "C" oder "C++"? Sie sind nicht die gleiche Sprache und werden nicht die gleiche Antwort haben. –