【发布时间】:2013-02-12 06:45:51
【问题描述】:
我有一个结构“单元格”定义为
typedef struct{
int id;
terrainType terrain;
} cell;
然后我用
制作一个二维单元格数组cell** makeCellGrid(int sizeX, int sizeY)
{
cell** theArray;
int i;
theArray = (cell**) malloc(sizeX*sizeof(cell*));
for ( i = 0; i < sizeX; i++)
{
theArray[i] = (cell*) malloc(sizeY*sizeof(cell));
}
return theArray;
}
起初我认为这工作正常,但后来出现了一些段错误,我发现使用某些值(例如 makeCellGrid(32, 87) )它会中断。 我对 C 指针和内存垃圾相当新鲜,希望有人能在这里为我指明正确的方向。
使用较低的数字界限我可以毫无问题地访问它
map[i][j].id = x;
等等
编辑:忘记添加,从测试中,段错误源自
theArray[i] = (cell*) malloc(sizeY*sizeof(cell));
【问题讨论】:
-
这段代码看起来不错。您确定不会意外交换 X 和 Y 索引吗?
-
i和j的值是多少? -
您是否在可以使用
valgrind的Linux 等系统上?如果是这样,请使用它。您显示的代码显然不是问题所在。因此,这可能与您如何使用代码返回的数据有关。 -
(1) Take out the casts on your malloc() calls. (2) 确保包含
<stdlib.h>。如果您遇到的第一个malloc()'ed 地址取消引用在您的编辑评论中看起来像这样,您可能没有存储完整的指针,这比您隐藏隐含的malloc()函数声明时更常见像这样的演员。 -
@alk 可能,但函数名称另有说明。它只是游戏中使用的某种地图。此外,使用单个内存块可能会提高代码速度,因为大部分地图总是会加载到缓存中,这对于碎片内存是不可能的