對於一個賦值,我必須爲一個結構分配一塊連續的內存塊,但我首先嚐試使用一個二維數組,首先嚐試它,看看我是否正確理解它。本書中的示例爲指針數組(行)創建了一塊內存塊,然後初始化列並將指針指向它們。這個例子是:連續內存塊的動態分配(malloc)
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返回,但它是爲int的組合INT *。所以我不太確定我是否在正確的軌道上。思考?
但是,如何將該內存塊劃分爲列以及指向這些列的數組。 – Crystal 2010-02-12 08:03:20