我想在一個函數調用中創建一個連續的內存塊,該函數調用將第一部分內存作爲指針數組指向其他塊。基本上,我試圖做到:與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);
}
但有一個塊。這是據我已經得到了:
int *Create2D(size_t rows, size_t cols) {
int **memBlock;
int **arrayPtr;
int loopCount;
memBlock = (int **)malloc(rows * sizeof(int *) + rows * cols * sizeof(int));
if (arrayPtr == NULL) {
printf("Failed to allocate space, exiting...");
exit(EXIT_FAILURE);
}
for (loopCount = 1; loopCount <= (int)rows; loopCount++) {
arrayPtr = memBlock + (loopCount * sizeof(int *));
//I don't think this part is right. do I need something like arrayPtr[loopCount] = ....
}
return(memBlock);
}
我想我得到你的答案,但我在爲行指針和列分配內存的想法有問題。因此,對於那塊內存,cb,你可以只是將pmem部分分類來分割它?像第一部分是指向指針的指針,然後指向最後一行指針的pcol,然後初始化cols並讓指針指向的指針指向pcol?像那樣的東西? – Crystal 2010-02-12 09:50:32
是的。你分配總數,然後使用指針數學得到一個pcol指針,指向第一個地址_after_你想要分配給prows的部分,然後遍歷pcol指針並使用它來初始化prow數組。最終的結果是一個分配,但與原始代碼具有相同的佈局。 – 2010-02-12 09:55:21
@Crystal:再次檢查代碼,我有一個循環中的錯誤。抱歉。 – 2010-02-12 10:01:07