所以我有一个这样的结构(事实上它更大):
struct _setup {
char* selfName;
int8_t zone;
char* selfSSID;
char* selfWPA2;
}
我用它来保存我的设备的配置; JSON是一个想法,但它需要很多资源和时间来处理
我想为每个char *分配32个字符。
这个结构会发生什么:
1.填充未知长度BUT短于32字节的数据
2.保存到EEPROM
3.从EEPROM读取到另一个结构(相同的布局)
我在结构中尝试了malloc和new但它没有用。
分配内存和向struct写入数据的正确方法是什么?
答案 0 :(得分:1)
如果在std::string
char*
而非c++
对于您的代码,这可能是更易读的方式与析构函数:
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 :(得分:0)
您有两种为结构成员分配内存的选项:
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运算符进行动态分配。但你应该记住,使用它们后你必须自由()这些动态记忆。我把它放在了析构函数中,你可以把它放在你想要的任何地方。