malloc возвращает 0

Вопросы по языкам программирования Си и С++.
Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

malloc возвращает 0

Сообщение Александр Дмитриев » 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, и, возможно, других функций?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: malloc возвращает 0

Сообщение ANDLL » 14.05.2009 (Чт) 9:49

Криво работаешь с памятью. Гдето вылазишь за пределы выделенной области и повреждаешь кучу.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: malloc возвращает 0

Сообщение Александр Дмитриев » 15.05.2009 (Пт) 6:15

Так и есть. В одном месте в аргументе malloc'а забыл написать * sizeof(double), в результате памяти выделялось в 8 раз меньше, потом писал помимо выделенной области, портил кучу, malloc возвращал 0.


Вернуться в С/С++

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList