有没有办法在大型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
答案 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]);
}