[英]char* in struct memory allocation
所以我有一個這樣的結構(實際上它更大):
struct _setup {
char* selfName;
int8_t zone;
char* selfSSID;
char* selfWPA2;
}
我用它來保存我的設備的配置; JSON 是一個想法,但它需要大量資源和時間來處理。
我想為每個字符*分配 32 個字符。 這個結構會發生什么:
1.填充未知長度但小於32字節的數據
2.保存到EEPROM
3. 從 EEPROM 讀取到另一個結構體(相同的布局)
我在結構中嘗試了 malloc 和 new ,但沒有用。
分配內存和將數據寫入結構的正確方法是什么?
理想情況下,如果在c++
您應該使用std::string
而不是char*
對於您的代碼,這與析構函數一起可能更具可讀性:
struct _setup {
char* selfName;
int8_t zone;
char* selfSSID;
char* selfWPA2;
_setup()
{
selfName = new char[32];
selfSSID = new char[32];
selfWPA2 = new char[32]; //Or this for direct value: new char [strlen("hello") + 1];
//strcpy(selfWPA2, "hello");
}
~_setup()
{
delete selfName;
delete selfSSID;
delete selfWPA2;
}
};
您有兩種為結構成員分配內存的選項:
1-靜態內存分配:
struct _setup {
char selfName[32];
int8_t zone;
char selfSSID[32];
char selfWPA2[32];
}
如果您的分配大小很短並且您在編譯時知道該大小,則建議使用靜態分配。 否則使用動態分配。
靜態分配比動態分配快。 但是如果你想從這個結構中創建大量的對象,你可能會得到 Stackoverflow 異常。 因為您可以利用所有堆棧空間。 (如果您的實際數組大小約為 32,則 Stackoverflow 異常是不可能的)
2-動態分配:
struct _setup {
char* selfName;
int8_t zone;
char* selfSSID;
char* selfWPA2;
_setup()
{
selfName= (char*)malloc(sizeof(char)*32);
selfSSID= (char*)malloc(sizeof(char)*32);
selfWPA2= (char*)malloc(sizeof(char)*32);
}
~_setup()
{
free(selfName);
free(selfSSID);
free(selfWPA2);
}
}
您可以將動態分配與 malloc 或 new 運算符一起使用。 但是你應該記住,你必須在使用它們之后free()這些動態內存。 我把自由放在了破壞者中,你可以把它們放在你想要的任何地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.