![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Почитай в MSDN насчет HeapAlloc. Она может возвращать 0 в двух случаях: если нет памяти, или если хип поврежден. Полагаю, дело во-втором.
Как я поняла, один и тот же код (ParseCreationXMLFile) у тебя то работает, то нет, в зависимости от того, по какой ветви идет выполнение? Так проверь как следует ветку, в которой рушится. Посмотри функции HeapValidate, HeapQueryInformation, HeapWalk. -------------------- ... |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
А может скобки убрать при объявлении?
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Скобки там, конечно, не нужны, но вряд ли это они производят такой разрушительный эффект на хип
-------------------- ... |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
А хто знает? шестая ведь...
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
многопоточность используется?
-------------------- qqq |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Вот, и я так думаю. Но отыскать, где разрушаю, уже неделю не могу. Все работает замечательно имеено до момента указанного выделения.
Да, используется. до 15 потоков. |
||||
|
|||||
| dronzo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 26.11.2005 Где: Москва Репутация: 1 Всего: 8 |
bel_nikita, Здесь обсуждается похожая проблема. Я честно пытался понять до конца, так как самому интересно стало, но ...
http://groups.google.ru/group/microsoft.pu...892c08b35aac700 |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Добавлено @ 22:39 Попробуй, что бы было ясно что дело не в outofmemory. Добавлено @ 22:40 А класс CXMLRead самописный? Может трабла в его конструкторе? --------------------
|
||||
|
|||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
у HeapCreate есть один флажок: HEAP_NO_SERIALIZE возможно, по каким-то причинам он устанавливается правда, не знаю, как это проверить - никогда не сталкивался с необходимостью узнать параметры кучи если все-таки это так (может, где-то по умолчанию стояло однопоточное приложение), то я вижу три варианта: 1. для каждого потока сделать свою кучу (ну мало ли) 2. найти способ убрать флаг HEAP_NO_SERIALIZE, еслине ошибаюсь, этим занимается CRT... 3. использовать HeapLock и HeapUnlock -------------------- qqq |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Попробуй HeapValidate. Во-первых, вызови его перез самым new. Если он скажет, что хип порушен, начинай искать, где, с помощью тех же вызовов HeapValidate. Потоки могут вызвать взаимоблокировку при распределении памяти, с таким сталкивалась, но чтобы порчу кучи... Я думаю, это какой-нибудь тупой баг, типа записи по живому... -------------------- ... |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Никак не удается найти
|
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
А если прямо перед этой строчкой написать какое-нибудь банальное
оно будет работать? Мне тоже кажется, что проблема в конструкторе. Даже если не самописный, не боги горшки обжигают. |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Вот, такой дефайн пробывал вставлять, чтоб отловить куски, где хип "бью".
Но сейчас "покапался" в линкере и нашел переменную stack. Увеличил до 32768 и ... Ура! Работает!... Вроде |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
У тебя там что, рекурсивные вызовы есть, что стека не хватает? Или такие прикольные локальные переменные?
Интересно, а stack общий для всех потоков, или каждому свой? |
|||
|
||||
| Lotrex |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 9.2.2006 Где: Казань Репутация: 2 Всего: 3 |
А мне бы как раз такой необычный new не помешал. Из приведенной цитаты стандарта понятно, что вроде можно это сделать, но не понятно, как... Мож, подскажете? |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |