我想分配一塊內存,並存儲結構的列表,而不使用多個malloc每個...這只是一個通用的例子,我沒有原始代碼I與之前的工作,但這是一般的想法,但我的問題是,當我的代碼的其他部分執行InitPoints()函數調用後,我得到堆腐敗。我不知道我的代碼的哪部分是非法的,但我懷疑它是在InitPoints()函數的for循環中。我試圖用這個表作爲表,然後如果我耗盡內存並將它們鏈接在一起,我可以創建額外的已定義大小的表......如果這樣做有道理,就像動態擴展數組一樣。使用malloc塊的結構
typedef struct Tb{
POINT points;
POINT *next;
} TABLE;
typedef struct Pt{
int x;
int y;
}POINT;
POINT *mypoints;
int main() {
int size = 10;
int i = 0;
mypoints = InitPoints(size);
for(i=0; i < size; i++)
{
printf("mypoint [%d] = (%d,%d)\n",i, mypoints->x, mypoints->y);
mypoints = mypoints + sizeof(POINT);
}
// some other code...
// i.e. createThread(....)
return 0;
}
POINT* InitPoints(int size)
{
POINT *tmp;
POINT *orig;
int a = 10;
int b = 1000;
orig = (POINT*) malloc (sizeof(POINT) * size);
if(orig == NULL)
return NULL;
tmp = orig;
for (i = 0; i < size; i++)
{
tmp->x = a++;
tmp->y = b++;
tmp = tmp + sizeof(POINT);
}
return orig;
}
謝謝,我試圖做到這一點裂縫,或人們實際上使用它?我不想使用簡單的鏈接列表來避免維護列表。我知道大多數時候我只會有少數元素與......一起工作,比如說10,但是如果我需要更多空間,我將只分配另外10個元素...... – emge 2010-06-24 02:26:37
不,這不是特別糟糕。不要小心你的指針算術! – BobbyShaftoe 2010-06-24 04:42:10