Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перераспределение памяти с помощью HeapReAlloc 
V
    Опции темы
Dogo
  Дата 3.8.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



Направьте на путь истинный. Пытаюсь перераспредилить память при помощи 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);" приводит к эксепшену. 
Укажите, пожалуйста на ошибку.



Это сообщение отредактировал(а) Dogo - 3.8.2007, 17:42
--------------------
 
PM MAIL ICQ   Вверх
Lomir
Дата 3.8.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 30.1.2007
Где: Lithuania::Kaunas

Репутация: нет
Всего: 1



Код

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

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

П.С. Могу ошибаться, в системное программирование вопше случайно заглянул.
PM MAIL ICQ Skype   Вверх
_hunter
Дата 3.8.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



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

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

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


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Dogo
  Дата 3.8.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



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

Это сообщение отредактировал(а) Dogo - 3.8.2007, 20:13
--------------------
 
PM MAIL ICQ   Вверх
Dogo
  Дата 3.8.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 20.2.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 9



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

--------------------
 
PM MAIL ICQ   Вверх
Earnest
Дата 3.8.2007, 20:26 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



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

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


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1012 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.