Автор Леон задал вопрос в разделе Другие языки и технологии
Непонятная ошибка в программе на Си (в функции malloc) и получил лучший ответ
Ответ от Modern Иванов[гуру]
Скорее всего у тебя ошибка в логике программы а не в работе malloc().Если ф-ция пару раз вызывается нормально, а только потом падает. Нужно смотреть весь код. Хотябы код самой ф-ции и тот код, где она и как вызывается. Плюс убери в конце описания структуры создание объекта block.Ты его не создаёшь, его создаёт код, следовательно ты не можешь им управлять. Возможно ты где-то его используешь, потом удаляешь, потом для создания нового объекта используешь уже NULL(хотя думаешь, что объект block существует). А когда пытаешься обратиться к созданному через NULL объекту, то тебя выкидывает. В-общем при работе с памятью ошибки могут быть самые непредсказуемые. И найти их очень не просто. Они не лежат на поверхности. По-этому некоторые платформы возложили работу с памятью на себя, не разрешая программистам вмешиваться в это дело. Например, JAVA и .NET.Хорошо что ошибка выскочила на третьем вызове. А еслиб она выскочила на двух-миллионном. Ты уже давно прогнал программу, её давно установили на бортовой комп самолёта, а она вылезла чёрт знает когда.
дело не в malloc
malloc выделяет память размером sizeof
но у тебя в структуре содержится указатели... .
для них память не выделяется.. . а точее выделяется только для адреса ...для Win32 это 32 бита... .
ты скорей всего пытаешься использовать указатель внутри структуры для которого память не выделена....
Разве malloc возвращает не void? А где преобразование типов:
block *a= (block*) malloc(sizeof(block));
Если ничего не путаю компилер должен был ругнуться.
как переводится на английский: до ре ми фа соль ля си до, в общем ноты
Изобретатель современной системы нотной записи – бенедиктинский монах Гвидо Аретинский (Гвидо
подробнее...
Может, кто видел? А то я никак не въеду что сие значит - На тетрапаках с молоком пишут "молоко отборное"
Молоко отборное - это молоко полностью сохранившее все свои полезные свойства. Для его изготовления
подробнее...
Зачем нужен malloc() в Си? И что он делает?
Выделяет оперативную память для переменной во время выполнения программы. Это дает возможность
подробнее...
Как в языке си преобразовать тип uint16_t в const char* ? слышал можно через sprintf,но как-не понял.
эх, молодежь.. .
const char* convert( uint16_t x )
{
char* res = (char*)malloc(
подробнее...
Динамический массив в Си
Операция new для языка C++, а в Си требуется такая конструкция при выделении памяти:
подробнее...
Динамическое выделение памяти, при сравнении строк. (Си без использования встр. функций)
> char *pass;
> scanf("%s", &pass);
Это не будет работать!
В переменной pass
подробнее...
Как динамически выделить память под структуру? (Си)
Так динамически или статически ?
статически :
Book mybookarray[3];
подробнее...
Каким образом можно заполнить односвязный список на си? Желательно с примером кода
Держите:
$ cat linkedlist.c
#include <stdio.h>
#include
подробнее...
Списки в Си. Подскажите, пожалуйста, сайт, где доступно и понятно изложена тема линейных списков на Си (не ++)
односвязный циклический список это как бы рукурсивное объявление струкутыр, точнее указателя на нее
подробнее...
Оператор return в СИ
Оператор return возвращает то, что ты укажешь ему.
Оперируют в большинстве только со
подробнее...
Работа со строками в Си
Создаёте буфер и флаг. Буфер для того чтобы писать в него предложение от начала до конца. Флаг для
подробнее...
как назвать собаку мальчика пекинеса?
Кличка должна быть простая и короткая, так ему проще будет её запомнить: Бобик, Лаки, Шарф, Рекс,
подробнее...