Разделите большой блок malloc на более мелкие «перегородки» - PullRequest
1 голос
/ 13 октября 2009

Есть ли способ использовать арифметику Пуатье для большого блока malloc, чтобы можно было назначить несколько структур или примитивных типов данных для этой области, уже выделенной? Я пишу что-то вроде этого, но это не работает (пытается присвоить 200 структур для области malloc 15000 байт):

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 ]

1 голос
/ 13 октября 2009

Единственное, что я вижу, это то, что:

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

должно быть:

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

Я думаю?

PS: ваш malloc может также просто распределиться 200 * sizeof(METADATA).

0 голосов
/ 13 октября 2009

В 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]);
}
...