动态声明结构不按预期工作

时间:2017-12-12 09:57:08

标签: c memory-management struct

我的程序出现问题,而且我试图将其分解,而且我发现我的内存分配问题至少存在问题。

我有一个结构:

typedef struct{

    int originX;
    int originY;
    char ticBoard[3][3];
    int result;
    int turn;

} simBoard;

我希望这个结构的大小(它的一个单一实例)是(4英寸* 4字节)+(1英里字符* 3 * 3)或25字节。当我在simBoard上运行sizeof()函数时,我得到一个28字节的值。我假设它不是我不需要担心的25 + 3额外费用。

主要问题是我尝试声明此结构的数组

simBoard* boardArray = (simBoard*)malloc(sizeof(simBoard)*size));

假设此方案的大小是常量。据我所知,这应该创建一个大小为 size 的simBoard结构数组。我应该可以去

boardArray[3]

获得第4项boardArray正确吗?但是,我遇到了内存分配问题。我跑的时候:

printf("%zu is the size of the array\n", sizeof(boardArray));

返回值为8.我甚至试图进一步解决问题:

simBoard* boardArray = (simBoard*)malloc(224);

当我再次运行printf时,我仍然得到boardArray的8字节值。如果你们能引导我朝着正确的方向前进,那就太棒了,因为我绝对难过。

谢谢!

1 个答案:

答案 0 :(得分:0)

您确实可以使用符号struct为数组中的第4个boardArray[3]编制索引。

请记住boardArray本身是指针类型。这解释了您的printf输出。具有动态存储持续时间和指针类型的数组在C中是密不可分的。为避免疑义,sizeof(boardArray)sizeof(simBoard*)

C不提供获取动态数组长度的功能。你需要自己记住长度。

完成后不要忘记致电free(boardArray)。 C运行时库将采取适当的措施来确保释放所有struct元素。