将大型malloc-block划分为更小的“分区”

时间:2009-10-13 15:42:27

标签: struct pointers malloc math

有没有办法在大型malloc块上使用poiter算法,因此可以为已分配的区域分配多个结构或原始数据类型?我正在写这样的东西,但它不起作用(尝试将200个结构分配给15000byte malloc区域):

char *primDataPtr = NULL;


typedef struct Metadata METADATA;

struct Metadata {
    .
    .
    .
};/*struct Metadata*/


.
.
.




primDataPtr = (void*)(malloc(15000));
if(primDataPtr == NULL) {       
    exit(1);
}

char *tempPtr = primDataPtr;
int x;
for(x=0;x<200;x++) {
        METADATA *md = (void*)(primDataPtr + (sizeof(METADATA) * x));
}//end x -for

2 个答案:

答案 0 :(得分:1)

我唯一能看到的是:

METADATA *md = (void*)(primDataPtr + (sizeof(METADATA) * x));

应该是:

METADATA *md = (METADATA *)(primDataPtr + (sizeof(METADATA) * x));

我想?

PS:您的malloc也可以只分配200 * sizeof(METADATA)

答案 1 :(得分:0)

在C中,指向某事物的指针的语法就像某个数组的语法一样。您只需要小心索引范围:

#define ARRAY_SIZE_IN_BYTES (15000)

void *primDataPtr = (void*) malloc(ARRAY_SIZE_IN_BYTES);
assert(primDataPtr);

METADATA *md = (METADATA *)primDataPtr;
for (x=0; x<(ARRAY_SIZE_IN_BYTES/sizeof(METADATA)); x++) {
    do_something_with(md[x]);
}