我在尝试在C中动态分配结构时遇到问题:
typedef struct
{
uint8_t wifiSSID[30];
uint8_t wifiPassword[20];
}
tWifiPair;
typedef struct
{
tWifiPair *wifiNetworks; // this needs to become an array with 2 elements
// if I do the above like this tWifiPair wifiNetworks[1] - all works fine
}
tEEPROMSettings;
tEEPROMSettings gEEPROMSettings;
int main()
{
gEEPROMSettings.wifiNetworks = (tWifiPair *)calloc(2, sizeof(tWifiPair));
// .... writing to gEEPROMSettings.wifiNetworks[0].wifiSSID crashes the program, unfortunately I can't see the error, but the compiler doesn't throw any errors/warnings
}
如果这个tWifiPair * wifiNetworks是静态完成的 - tWifiPair wifiNetworks [1] - 它工作正常,但我需要动态地做,并且可能在程序运行时更改它。
这是在嵌入式平台上运行 - ARM tm4c1294ncpdt,编译器是CCS6。
你能指出我错误的地方吗?谢谢!
答案 0 :(得分:4)
您需要检查calloc
的返回值以确保其成功。
成功时,指向由函数分配的内存块的指针。 此指针的类型始终为void *,可以将其强制转换为所需类型的数据指针,以便可以取消引用。 如果函数未能分配所请求的内存块,则返回空指针。
现在,如果calloc
失败,那就是另一个问题。
使用评论信息更新其他人阅读:
这似乎是一个嵌入式系统,可能配置了一个小堆。 calloc
确实返回NULL
,因此分配失败。根据您的编译器/链接器,您可能需要调整链接描述文件,分散文件或项目选项以更改堆大小。