Александр Дмитриев » 14.05.2009 (Чт) 8:15
Объясните мне пожалуйста, по каким причинам функция malloc в программе на Си при передаче ей аргумента 88 может возвращать значение 0. Компилятор vc++6, программа написана на чистом Си, конфигурация проекта - Debug (соответственно вместо malloc используется malloc_dbg), при конфигурации Release просто валится где-то в середине (примерно там же, где и валится при Debug'е), по той причине, что я "в выделенную память" что-то пытаюсь записать. При простом запуске программы ошибка (отправить ли Microsoft сообщение об ошибке) возникает раньше, чем при отладке. На другом компьютере поведение такое же, на третьем - всё в порядке (malloc возвращает то, что нужно, и программа работает нормально). При вызове malloc'а ставится ошибка 998, ERROR_NOACCESS, "Invalid access to memory location" (получено при помощи GetLastError). Выснено, что такая же ошибка ставится в некоторых местах программы при выполнении функции fprintf, успешно записывающей double в файл (double этот при этом находится либо в сегменте данных, либо на стеке, но не в куче). Есть предположение, что я где-то порчу кучу (то есть записываю помимо выданного места и перезаписываю какие-то служебные данные). Может ли это быть причиной такого поведения malloc'a, и, возможно, других функций?