malloc() & Win7

программы софт windows 7

Добрый день! Столкнулся со следующей проблемой: вызов malloc(sizeof(<маленькая_структурка>)) приводит к краху пролграммы, при этом, в процессе дебага все гладко.. Юзаю Eclipse CDT, пишу на "C"; ОС - Win7;
тот же код гладко идет под Линухом, но мне удобней работать под win. Самое интересное, что вызов malloc(1000000) проходит, а вот malloc(1024) допустим - вызывает падение.. Среда пишет что падение в ntdll - кривое ядро?? Или я что то недопонимаю?? :wall:

Спецы, отзовитесь! :)

Примечание:
2 John Freeman Разве malloc() проходит мимо ядра?? всегда считал его надстройкой над вызовом.. Как он может выделять память напрямую, когда все через ядро и MMU канает??

Примечание:
Когда иду дебаггером по коду все выполняется на ура; а вот трассировать более низкоуровнево возможность не имею, тк не секу в x86 асме =)

Примечание:
2 Старший бригады телепатов - Да, падение malloc() - то чего менее всего можно ожидать)) хоть бы null вернул XD;

ЗЫ посмотрю настройки, всем спасибо)

Примечание:
Дак, я пробовал просить 1024, 2048, 4096, 1000000 только в последнем случае проканало без падения... Вот прикол, что до этого места происходит не один malloc() в разных местах и все нормально, а компилер - mingw это порт gcc c под win;

Кароч, всем спасибо, хватит кода на сегодня, пойду прогуляюсь, выходной всетаки! =)
Ответы:
Это у тебя компилятор кривой или чего-то накрутил в параметрах сборки. Это НЕ функция виндов, реализация её на компиляторе, вообще под винды и используй WINAPI функции лучше.
Надстройка и есть, но не простой переходник, а вполне осмысленный код, и на абсолютно разные вызовы и методы которые ещё под разные ос могут иметь несколько реализаций, трейси в дебаггере - смотри где крашится и докладывайся тогда по форме если разбираешься в теме, там даже свой дебаггер не нужен, можно прямо в олли пройтись.
----------
С тебя и не требуется, дойди до ошибки и тупо посмотри трейс, какая функция ядра вызывается и с какими  аргументами. Впрочем, думаю всё равно менять тебе компилятор...
Падающий malloc() — это нечто :)
А, и да. Есть у меня теория одна - размер страницы в 32битном ядре 4k , посмотри не будет ли крашиться на границе, меньше - краш, больше - работает, это значит что компилятор не выравнивает по странице либо потом некорректно пытается освободить память. Обход понятно какой самому выравнивать чтобы минимум 4к всегда было(всё равно вся страница выделится так или иначе), но всё равно на хрен такой компилятор.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.