Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Перераспределение памяти с помощью HeapReAlloc


Автор: Dogo 3.8.2007, 17:40
Направьте на путь истинный. Пытаюсь перераспредилить память при помощи HeapReAlloc().
Код

#define MIN_HEAP_SIZE 1
#define MAX_HEAP_SIZE 3000000

HANDLE  myHeap;
char * testStr;

myHeap=HeapCreate(HEAP_GENERATE_EXCEPTIONS, MIN_HEAP_SIZE,  MAX_HEAP_SIZE);

testStr=(char*)HeapAlloc(myHeap, HEAP_GENERATE_EXCEPTIONS, 10);

testStr="123456789";

testStr=(char*)HeapReAlloc(myHeap, HEAP_GENERATE_EXCEPTIONS, testStr, 20);

strcat(testStr, "abcdefghij");

 
строка - "testStr=(char*)HeapReAlloc(myHeap, HEAP_GENERATE_EXCEPTIONS, testStr, 20);" приводит к эксепшену. 
Укажите, пожалуйста на ошибку.


Автор: Lomir 3.8.2007, 17:57
Код

testStr="123456789";
char* testStr = cost char*("123456789")

Присваивания указателей а не строк.
Нолжно быть strcpy();

П.С. Могу ошибаться, в системное программирование вопше случайно заглянул.

Автор: _hunter 3.8.2007, 17:58
кто тебя так:
Цитата(Dogo @  3.8.2007,  17:40 Найти цитируемый пост)
testStr="123456789";

строки учил копировать/присваивать? -- это ж полная ересь.
ну а потом по левому адресу:
Цитата(Dogo @  3.8.2007,  17:40 Найти цитируемый пост)
HeapReAlloc(myHeap, HEAP_GENERATE_EXCEPTIONS, testStr

что-то пытаешся перевыделить...

Автор: Dogo 3.8.2007, 20:05
Спасибо за попытку помочь. На самом деле все оказалось проще. Дело в том, что при выделении нового блока памяти он заполнялся мусором, вследствие чего не было места для записи строки "abcdefghij". Забыл обнулить выделяемую память после включения флага "HEAP_ZERO_MEMORY" в вызове HeapReAlloc все заработало...)))

Автор: Dogo 3.8.2007, 20:25
Ух я нагородил. Сегодня явно не мой день...
Не внимательно я код скопировал из программы, конечно же _hunter прав... м да наверное сегодняшняя жара сказалась...(((
Прошу прощения за то, что напрасно потревожил.

Автор: Earnest 3.8.2007, 20:26
Цитата(Dogo @  3.8.2007,  18:40 Найти цитируемый пост)
testStr="123456789";

Тем не менее, _hunter насчет этой строки прав: ты как минимум теряешь указатель на выделенный блок памяти и получаешь утечку.
А насчет "все заработало" - это тебе только показалось...
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)