#include <stdio.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main( void )
{
struct heapinfo hi;
char *array[ NUM_PTRS ];
int i;
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
hi.ptr = NULL;
printf( " Size Status\n" );
printf( " ---- ------\n" );
while( heapwalk( &hi ) == _HEAPOK )
printf( "%7u %s\n", hi.size, hi.in_use ? "used" : "free" );
return 0;
}
работает ли пример из билдера?
есть пример для функции heapwalk
Я его просто напросто копирую и вставляю в исходник .cpp
работает ли он?
Код:
Почему цикл по while вообще ниразу не выполняется?
Куча ведь не пуста и не конец еще.
Проверил еще в Borland C ++ 3.1 Builder - вроде выполняется, но уже другой баг - почему-то строки "used" и "free" никак не хотят выводиться. В чем причина?
В Borland c++ 6.0 с типом элемента все ОК. Но почему-то в heapwalk всегда выдает HEAPEND (т.е. 5). В результате цикл даже не начинается. Объясните кто знает.
Код:
#include <stdio.h>
#include <malloc.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(int argc, char* argv[])
{
_HEAPINFO *hi;
char *array[ NUM_PTRS ];
int i;
hi = (_HEAPINFO *) malloc( sizeof(_HEAPINFO) );
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
hi->_pentry = NULL;
printf( " Size Status\n" );
printf( " ---- ------\n" );
while( _rtl_heapwalk( hi ) == _HEAPOK )
printf( "%7u %s\n", hi->_size, hi->_useflag ? "used" : "free" );
free( hi );
return 0;
}
#include <malloc.h>
#include <alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(int argc, char* argv[])
{
_HEAPINFO *hi;
char *array[ NUM_PTRS ];
int i;
hi = (_HEAPINFO *) malloc( sizeof(_HEAPINFO) );
for( i = 0; i < NUM_PTRS; i++ )
array[ i ] = (char *) malloc( NUM_BYTES );
for( i = 0; i < NUM_PTRS; i += 2 )
free( array[ i ] );
hi->_pentry = NULL;
printf( " Size Status\n" );
printf( " ---- ------\n" );
while( _rtl_heapwalk( hi ) == _HEAPOK )
printf( "%7u %s\n", hi->_size, hi->_useflag ? "used" : "free" );
free( hi );
return 0;
}
С heapwalk у меня результат такой же, что и у вас. Причину надо искать в исходниках этой функции.
Может нужно для ее применения какие то настройки спец-е делать?
Цитата: warobushek
Т.е. Вы считаете, что это может быть ошибка в коде библиотечной функции?
Может нужно для ее применения какие то настройки спец-е делать?
Может нужно для ее применения какие то настройки спец-е делать?
Пока не знаю. Не разбирался. Возможно просто надо правильно ее использовать. Стоит почитать литературу по Borland'у и поискать подобные заметки в интернете.
Спасибо за ответы.