【发布时间】:2010-09-22 02:42:46
【问题描述】:
大家好, 以下分配二维数组的逻辑是否有问题:
unsigned char **
Malloc2D_uchr(int ht, int wt, unsigned char initv)
{
int h, w;
unsigned char **x;
x = (unsigned char **) malloc(sizeof(void *) * ht);
DEBUG_PRINT_MEMLOC_EXIT(x,"malloc failed (%s,%i)\n",sizeof(void *)*ht);
x[0] = (unsigned char *) malloc(sizeof(unsigned char) * ht * wt);
DEBUG_PRINT_MEMLOC_EXIT(x[0],"malloc failed (%s,%i)\n",sizeof(unsigned char)*ht*wt);
for (h = 1; h < ht; h++)
{
x[h] = x[h - 1] + wt; /* + is a pointer summation */
}
for (h = 0; h < ht; h++)
{
for (w = 0; w < wt; w++)
{
x[h][w] = initv;
}
}
return x;
}
宏展开是:
#define DEBUG_PRINT_MEMLOC_EXIT(t,s,z); if(t == NULL){\
printf(s,__FILE__,__LINE__,z);\
printf("Malloc size = %d\n",z);\
exit(-1);\
}
有时在 malloc() 期间代码会崩溃。
提前致谢。
【问题讨论】:
-
DEBUG_PRINT_MEMLOC_EXIT是否检查分配错误? -
是的,确实如此。我发布了宏扩展。
-
如果
malloc崩溃了,那么这可能意味着您在之前的某个时间点超出了使用malloc()分配的块的范围。如果您的平台支持,请使用valgrind进行检查。
标签: c memory-management malloc