【发布时间】:2017-12-12 09:57:08
【问题描述】:
我的程序出现问题,我正在尝试对其进行分解,但我发现至少在内存分配方面存在问题。
我有一个结构:
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]
并且得到 boardArray 的第 4 项正确?但是我遇到了内存分配的问题。当我跑步时:
printf("%zu is the size of the array\n", sizeof(boardArray));
返回值为8。我什至尝试进一步梳理问题:
simBoard* boardArray = (simBoard*)malloc(224);
当我再次运行 printf 时,我仍然得到 boardArray 的 8 个字节的值。如果你们能带领我朝着正确的方向前进,那就太棒了,因为我在这里完全被难住了。
谢谢!
【问题讨论】:
-
boardArray 是一个指针,而不是一个数组。它的大小是你平台上的指针大小,不管它指向什么。
-
你甚至没有打印
sizeof...你只是在打印指针的值。但是如果你得到8,我猜你发布的内容并不是你正在运行的内容。 :/ 你的问题是什么? “我遇到了内存分配问题。” 问题是什么?您想获得尺寸但不知道如何获得?那是程序员的问题,分配没有任何问题。这不是一个写得很清楚的问题。 -
@underscore_d 抱歉打错了,我在 printf 上做的是 `printf("%zu is the size of the array\n", sizeof(boardArray))l
-
@MatthewKerian:boardArray 不是根据 C 类型系统的数组。它的类型是“pointer to boardSim”。当您询问它的大小时,您会得到该类型的大小(指向数据的指针)。您在上一条评论中发布的内容根本不起作用。唯一在运行时设置大小的数组在 C 中称为 VLA(查找),可能不是您想要的。
-
'抱歉打错了'复制/粘贴你实际测试过的代码,否则你在浪费大家的时间:(
标签: c memory-management struct