我的程序出现问题,而且我试图将其分解,而且我发现我的内存分配问题至少存在问题。
我有一个结构:
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字节值。如果你们能引导我朝着正确的方向前进,那就太棒了,因为我绝对难过。
谢谢!
答案 0 :(得分:0)
您确实可以使用符号struct
为数组中的第4个boardArray[3]
编制索引。
请记住boardArray
本身是指针类型。这解释了您的printf
输出。具有动态存储持续时间和指针类型的数组在C中是密不可分的。为避免疑义,sizeof(boardArray)
为sizeof(simBoard*)
。
C不提供获取动态数组长度的功能。你需要自己记住长度。
完成后不要忘记致电free(boardArray)
。 C运行时库将采取适当的措施来确保释放所有struct
元素。