【发布时间】:2011-01-15 23:09:27
【问题描述】:
对于一个分配,我必须为一个结构分配一个连续的内存块,但我首先尝试使用一个二维整数数组来做它,看看我是否理解正确。我们在书中有一个示例,它为指针数组(行)创建一块内存,然后初始化 cols 并将指针指向它们。这个例子是:
int **CreateInt2D(size_t rows, size_t cols)
{
int **p, **p1, **end;
p = (int **)SafeMalloc(rows * sizeof(int *));
cols *= sizeof(int);
for (end = p + rows, p1 = p; p1 < end; ++p1)
*p1 = (int *)SafeMalloc(cols);
return(p);
}
void *SafeMalloc(size_t size)
{
void *vp;
if ((vp = malloc(size)) == NULL) {
fputs("Out of mem", stderr);
exit(EXIT_FAILURE);
}
return(vp);
}
我基本上需要做上面代码所做的事情,只是让它成为一个连续的内存块。约束是我只允许调用 malloc 一次,然后我必须使用指针数学来知道将指针初始化到什么。所以我想我会用类似的东西初始化足够的内存:
int *createInt2D(size_t rows, size_t cols)
{
malloc(rows * sizeof(int *) + (row + cols) * sizeof(int));
}
但这似乎不太正确,因为我认为我必须对从 malloc 返回的 void * 进行类型转换,但它是 int 和 int* 的组合。所以我不太确定我是否走在正确的轨道上。想法?
【问题讨论】: