C动态分配struct

时间:2014-06-18 21:14:47

标签: c pointers struct dynamic-allocation code-composer

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

你能指出我错误的地方吗?谢谢!

1 个答案:

答案 0 :(得分:4)

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

  

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

来自this reference

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

使用评论信息更新其他人阅读:

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