malloc си



Автор Леон задал вопрос в разделе Другие языки и технологии

Непонятная ошибка в программе на Си (в функции malloc) и получил лучший ответ

Ответ от Modern Иванов[гуру]
Скорее всего у тебя ошибка в логике программы а не в работе malloc().Если ф-ция пару раз вызывается нормально, а только потом падает. Нужно смотреть весь код. Хотябы код самой ф-ции и тот код, где она и как вызывается. Плюс убери в конце описания структуры создание объекта block.Ты его не создаёшь, его создаёт код, следовательно ты не можешь им управлять. Возможно ты где-то его используешь, потом удаляешь, потом для создания нового объекта используешь уже NULL(хотя думаешь, что объект block существует). А когда пытаешься обратиться к созданному через NULL объекту, то тебя выкидывает. В-общем при работе с памятью ошибки могут быть самые непредсказуемые. И найти их очень не просто. Они не лежат на поверхности. По-этому некоторые платформы возложили работу с памятью на себя, не разрешая программистам вмешиваться в это дело. Например, JAVA и .NET.Хорошо что ошибка выскочила на третьем вызове. А еслиб она выскочила на двух-миллионном. Ты уже давно прогнал программу, её давно установили на бортовой комп самолёта, а она вылезла чёрт знает когда.

Ответ от Ёергей Максимов[гуру]
дело не в malloc
malloc выделяет память размером sizeof
но у тебя в структуре содержится указатели... .
для них память не выделяется.. . а точее выделяется только для адреса ...для Win32 это 32 бита... .
ты скорей всего пытаешься использовать указатель внутри структуры для которого память не выделена....

Ответ от Zilon[гуру]
Разве malloc возвращает не void? А где преобразование типов:
block *a= (block*) malloc(sizeof(block));
Если ничего не путаю компилер должен был ругнуться.

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Непонятная ошибка в программе на Си (в функции malloc)
Динамическое распределение памяти на Википедии
Посмотрите статью на википедии про Динамическое распределение памяти
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*