2013-03-31 3 views
1
const int size = 50000; 
char pool[size]; 

int freeMemory(void) 
{ 
int freemem = 0; 
for(int i = 0; i < size; i++) 
{ 
    if(pool[i] == NULL) 
    { 
     freemem++; 
    } 
    i++; 
} 

return freemem; 
} 

Если я вызываю freeMemory(), возвращаемый размер всегда имеет значение HALF того, что изначально было объявлено. 25000 специально здесь. Даже если я не инициализирую ничего в самом бассейне. Почему это? Нужно ли сначала инициализировать что-то?C++ Арена Allocator Свободная память всегда половина

void initialize(void) 
{ 
//Don't quite understand if I need to initialize something here? 
} 

И я стараюсь избегать использования нового оператора. Причина в том, что я пытаюсь вручную управлять памятью внутри пула.

ответ

1

Потому что у вас есть дополнительный оператор i++; в вашем цикле for. Таким образом, каждая итерация на самом деле увеличивает итератор дважды, эффективно делая вас всего лишь в два раза.

Удалите линию i++; в конце цикла for.

+0

Ничего себе! Как глупо со мной. Приношу свои извинения за то, что вы потратили свое время на это lol – user99999991

+0

@ user2229804 Эй, не беспокойтесь, случается со всеми нами. Upvote и отметьте ответ как правильный, если он решит вашу проблему. –

+0

Да! Я не мог сделать это, пока таймер не кончился. Готово. :) – user99999991

Смежные вопросы