我想分配一块内存,并存储结构的列表,而不使用多个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