請問這種多層嵌套的變長結構體,怎樣申請記憶體會比較合理呢,我遇到一個問題就是,A結構體的a_val_1[0]和a_val[1]之間的地址差只有sizeof(B)那么大,也就是兩個BYTE那么長,從而導致a_val_1[0].b_val_2[0]的c_val_1和c_val_2兩個值被a_val_1[1]的b_val_1和b_len覆寫了。(linux開發環境中)
struct C
{
BYTE c_val_1;
BYTE c_val_2;
}
struct B
{
BYTE b_val_1;
BYTE b_len;
struct C b_val_2[0];
}
struct A
{
BYTE a_len;
struct B a_val_1[0];
}
還有遇到一個結構體中存在兩個變長變數的時候,怎么處理
struct D
{
BYTE d_len;
BYTE d_val_1[0];
BYTE d_val_2[0];
}
uj5u.com熱心網友回復:
你這樣嵌套使用0長度陣列,屬于“濫用0長度陣列”的行為;因為0長度陣列實際是不分配記憶體,只是起到一個占位的作用,比如 struct A的a_val_1可以理解成strcut B *p_a_val_1;而這個p_a_val_1空間編譯器不會給你分配,需要應用程式自己通過malloc等動態分配記憶體手段來分配,使用完之后立即釋放掉;
這里就暴露它的一個重要缺點 :在結構體中,陣列為0的陣列必須在最后宣告,使 用上有一定限制。
回到樓主的問題:像樓主這樣嵌套疊加使用,是達不到想要的結果的。
記住一點: 0長度陣列其實就是靈活的運用的陣列指向的是其后面的連續的記憶體空間。
uj5u.com熱心網友回復:
多個結構嵌套,沒問題的。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/44234.html
標籤:網絡及通訊開發
上一篇:之前裝了一個C++Builder XE10.2,好外沒用了,今天點一下,又要破解
下一篇:高分求助,字符編碼問題
