Всем привет!
Не подскажете ли любителю, как выделить malloc большой массив памяти?
Ну, скажем, data=(int*)malloc(200000) не работает из-за ошибки в самой функции, а как бороться не знаю.
Спасибо.
>Всем привет!
>Не подскажете ли любителю, как выделить malloc большой массив памяти?
>Ну, скажем, data=(int*)malloc(200000) не работает из-за ошибки в самой функции, а как
>бороться не знаю.
>Спасибо.
Какая ОС? Какой компилятор? В каком конкретном месте ошибка?Телепаты в отпуске ...
>Какая ОС? Какой компилятор? В каком конкретном месте ошибка?
>
>Телепаты в отпуске ...Простите, пожалуйста. ОС Suse9.0, компилятор gcc3, ошибка не в моем исходнике а где-то в самом malloc, если это важно могу прислать сообщение из ddd.
Спасибо за ответ и еще раз простите.
Надо было сразу и сообщение дать.
Странно вообще-то, что он каких-то 200k не дает выделить :)
>Надо было сразу и сообщение дать.
>Странно вообще-то, что он каких-то 200k не дает выделить :)Да, XMan, вот лог ddd:
Program received signal SIGSEGV, Segmentation fault.
0x4018d487 in _int_malloc () from /lib/i686/libc.so.6
(gdb) up
#1 0x4018c06c in malloc () from /lib/i686/libc.so.6
(gdb) up
#2 0x08048f67 in read_receptor(char*, t_library*, t_atoms*) (input_file_name=0x804c7c0 "p.pdb", library=0x804c72c, atoms=0x804c734) at main.c:230
/home/alex/y_distance/y_distance/main.c:230:6014:beg:0x8048f67
Current language: auto; currently c++Строка main.c:230
atoms->atom=(t_one_atom*)malloc(160000);
Может еще какие данные нужно?
Угу. Компильни с переменной окружения "MALLOC_CHECK_=1" и посмотри, что он тебе говорить будет. Вероятно, где-то ты сказал два несколько раз free для одного адреса.
>Угу. Компильни с переменной окружения "MALLOC_CHECK_=1" и посмотри, что он тебе говорить
>будет. Вероятно, где-то ты сказал два несколько раз free для одного
>адреса.Говорит он тоже самое :(
ddd не хочет запускать этот бинарник вообще, а Kdeveloper сообщает на об ошибке в той же _init_malloc(). В консоли просто говорит Segmentation fault.
free там вообще нету – это первая функция загрузки данных из файла в структуры, а все free находятся в конце программы.
Нашел проблему!!!
Длинна одной из строк инпута совпадала с длинной массива, сделал динамический масив для строки и все заработало. Но вопрос остался, почему malloc не мог выделить память и как связаны длинна одного масива даных с выделением другого?
P.S. Прошу прощения за беспокойство из-за такого пустяка. :)
>Нашел проблему!!!
>Длинна одной из строк инпута совпадала с длинной массива, сделал динамический масив
>для строки и все заработало. Но вопрос остался, почему malloc не
>мог выделить память и как связаны длинна одного масива даных с
>выделением другого?
>P.S. Прошу прощения за беспокойство из-за такого пустяка. :)
Если с библиотеками все в порядке, то где-то просто портишь память ...