1

我在尝试在 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。

你能指出错误在哪里吗?谢谢!

4

1 回答 1

4

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

成功时,指向函数分配的内存块的指针。此指针的类型始终为 void*,可以将其强制转换为所需的数据指针类型,以便可取消引用。如果函数未能分配请求的内存块,则返回空指针。

这个参考

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

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

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

于 2014-06-18T21:19:44.297 回答