gpt4 book ai didi

C动态分配struct

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:57 25 4
gpt4 key购买 nike

我在尝试动态分配 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。

你能告诉我错误在哪里吗?谢谢!

最佳答案

您需要检查 calloc 的返回值以确保它成功。

On success, a pointer to the memory block allocated by the function. The type of this pointer is always void*, which can be cast to the desired type of data pointer in order to be dereferenceable. If the function failed to allocate the requested block of memory, a null pointer is returned.

来自 this reference

现在,如果 calloc 失败,那就是另一个问题了。

更新其他阅读评论中的信息:

这似乎是一个嵌入式系统,可能配置了一个小堆。 calloc 确实返回 NULL,因此分配失败。根据您的编译器/链接器,您可能需要调整链接描述文件、分散文件或项目选项以更改堆大小。

关于C动态分配struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24295119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com