malloc си



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

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

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

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

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

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Непонятная ошибка в программе на Си (в функции malloc)
спросили в Музыка Ареццо
как переводится на английский: до ре ми фа соль ля си до, в общем ноты
Изобретатель современной системы нотной записи – бенедиктинский монах Гвидо Аретинский (Гвидо
подробнее...

Может, кто видел? А то я никак не въеду что сие значит - На тетрапаках с молоком пишут "молоко отборное"
Молоко отборное - это молоко полностью сохранившее все свои полезные свойства. Для его изготовления
подробнее...
спросили в Molex
Зачем нужен malloc() в Си? И что он делает?
Выделяет оперативную память для переменной во время выполнения программы. Это дает возможность
подробнее...
спросили в Stdio h Stdlib h
Динамический массив в Си
Операция new для языка C++, а в Си требуется такая конструкция при выделении памяти:подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:

Как динамически выделить память под структуру? (Си)
Так динамически или статически ?

статически :
Book mybookarray[3];
подробнее...

Списки в Си. Подскажите, пожалуйста, сайт, где доступно и понятно изложена тема линейных списков на Си (не ++)
односвязный циклический список это как бы рукурсивное объявление струкутыр, точнее указателя на нее
подробнее...
спросили в Static X
Оператор return в СИ
Оператор return возвращает то, что ты укажешь ему.
Оперируют в большинстве только со
подробнее...
спросили в Stdio h Stdlib h
Работа со строками в Си
Создаёте буфер и флаг. Буфер для того чтобы писать в него предложение от начала до конца. Флаг для
подробнее...

как назвать собаку мальчика пекинеса?
Кличка должна быть простая и короткая, так ему проще будет её запомнить: Бобик, Лаки, Шарф, Рекс,
подробнее...
Динамическое распределение памяти на Википедии
Посмотрите статью на википедии про Динамическое распределение памяти
 

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

Имя*

E-mail:*

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