Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» malloc возвращает NULL

Автор: AlannY
Дата сообщения: 24.10.2008 18:39
Никак не могу отловить ошибку с malloc (а вернее с HeapAlloc под Windows). Готов уже с бубном танцевать, так достала

Где-то в моей проге:
str = (LPTSTR) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, size);
if(!str)
{
_tprintf (_T("can't allocate"));
return NULL;
}

Что поделать? Перечитал всю документацию, но функиця либо возвращается не правильный адрес или же возвращает NULL.

Похоже у меня повреждение стека, правда не пойму как - прога-то до простого тупая Кто-нибудь знает методы отлова Stack Corruption, ато гугл ничего нормального не выдаёт
Автор: akaGM
Дата сообщения: 24.10.2008 19:19
AlannY

а как бы ты сам ответил на вопрос:

у меня где-то в программе не работает функция scanf("%lu", &ulongN);

т.е. такое понятие как "наведённая ошибка" ты отвергаешь сразу?
size как определяешь?
ну используй хотя бы HEAP_GENERATE_EXCEPTIONS,
или возврат GetProcessHeap() с GetLastError() проверяй для начала...
да чё мы здесь, телепаты что ли?!
Автор: AlannY
Дата сообщения: 24.10.2008 19:31
Или HeapAlloc сама по себе падает, или GetLastError () возвращает 8.
Автор: akaGM
Дата сообщения: 24.10.2008 19:48
AlannY

Цитата:
GetLastError () возвращает 8.

блин...
памяти тебе не хватает, русским же языком сказано...

ты меня не понял...
без "код в студию!" (с) ru_bord
надеяться на помощь будет трудно...
Автор: AlannY
Дата сообщения: 24.10.2008 19:58
Да я понимаю, что без <кода в студию> ничем не помочь. Просто, если написать тестовую программку - этот код работает, а в другом, большом, проекте он не работает из-за этого HeapAlloc.

Памяти у меня много, так что явно не в этом дело
Автор: akaGM
Дата сообщения: 24.10.2008 20:00
ну здесь вот спроси
http://forum.ru-board.com/topic.cgi?forum=33&topic=0555#1
здесь спецы сидят...
Автор: Abs62
Дата сообщения: 24.10.2008 20:01
AlannY
Можно перед вызовом HeapAlloc проверить незапорченность кучи, вызвав HeapValidate. Если запорчена - нужно искать, где это происходит.

PS. Кстати о HeapAlloc:

Цитата:
If the function fails, it does not call SetLastError. An application cannot call GetLastError for extended error information.

Автор: AlannY
Дата сообщения: 24.10.2008 20:20
Да. Я это только что прочитал.

Ещё сделал небольшой тест. Перед моментом падение:

MEMORYSTATUS ms;
GlobalMemoryStatus (&ms);
_tprintf (_T("%d\n"), ms.dwMemoryLoad);

Пишет, что только 60% загружено, так что память есть
Автор: akaGM
Дата сообщения: 24.10.2008 20:23
Abs62
ну дык, а я о чём...
если 8-ка возвращается, значит GetProcessHeap и выставляет её...
или с тредами, например, замутил по самое не хочу...
не угадаем...
Автор: AlannY
Дата сообщения: 24.10.2008 20:26
>>HeapValidate
Интересные даёт результаты. Прямо перед моим malloc она возвращает 0, значит куча испорчена Осталось найти только где

Спасибо всем.

Добавлено:
Вообще, как оказалось дело было в функции GetFullPathName. Так что никто не угадал Даже я Странная эта функция и ведёт себя странно

Всем спасибо. Тема закрыта

Страницы: 1

Предыдущая тема: LDAP запрос в несколько OU


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.