URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2601
[ Назад ]

Исходное сообщение
"Выделения больших масивов памяти."

Отправлено ghost , 26-Фев-04 12:33 
Всем привет!
Не подскажете ли любителю, как выделить malloc большой массив памяти?
Ну, скажем, data=(int*)malloc(200000) не работает из-за ошибки в самой функции, а как бороться не знаю.
Спасибо.

Содержание

Сообщения в этом обсуждении
"Выделения больших масивов памяти."
Отправлено Murr , 27-Фев-04 12:14 
>Всем привет!
>Не подскажете ли любителю, как выделить malloc большой массив памяти?
>Ну, скажем, data=(int*)malloc(200000) не работает из-за ошибки в самой функции, а как
>бороться не знаю.
>Спасибо.


Какая ОС? Какой компилятор? В каком конкретном месте ошибка?

Телепаты в отпуске ...


"Выделения больших масивов памяти."
Отправлено ghost , 28-Фев-04 12:58 
>Какая ОС? Какой компилятор? В каком конкретном месте ошибка?
>
>Телепаты в отпуске ...

Простите, пожалуйста. ОС Suse9.0, компилятор gcc3, ошибка не в моем исходнике а где-то в самом malloc, если это важно могу прислать сообщение из ddd.

Спасибо за ответ и еще раз простите.


"Выделения больших масивов памяти."
Отправлено XMan , 28-Фев-04 16:54 
Надо было сразу и сообщение дать.
Странно вообще-то, что он каких-то 200k не дает выделить :)

"Выделения больших масивов памяти."
Отправлено ghost , 28-Фев-04 18:09 
>Надо было сразу и сообщение дать.
>Странно вообще-то, что он каких-то 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);
Может еще какие данные нужно?


"Выделения больших масивов памяти."
Отправлено XMan , 28-Фев-04 21:43 
Угу. Компильни с переменной окружения "MALLOC_CHECK_=1" и посмотри, что он тебе говорить будет. Вероятно, где-то ты сказал два несколько раз free для одного адреса.

"Выделения больших масивов памяти."
Отправлено ghost , 28-Фев-04 23:04 
>Угу. Компильни с переменной окружения "MALLOC_CHECK_=1" и посмотри, что он тебе говорить
>будет. Вероятно, где-то ты сказал два несколько раз free для одного
>адреса.

Говорит он тоже самое :(
ddd не хочет запускать этот бинарник вообще, а Kdeveloper сообщает на об ошибке в той же _init_malloc(). В консоли просто говорит Segmentation fault.
free там вообще нету – это первая функция загрузки данных из файла в структуры, а все free находятся в  конце программы.



"Выделения больших масивов памяти."
Отправлено ghost , 29-Фев-04 13:05 
Нашел проблему!!!
Длинна одной из строк инпута совпадала с длинной массива, сделал динамический масив для строки и все заработало. Но вопрос остался, почему malloc не мог выделить память и как связаны длинна одного масива даных с выделением другого?
P.S. Прошу прощения за беспокойство из-за такого пустяка. :)

"Выделения больших масивов памяти."
Отправлено Murr , 29-Фев-04 15:41 
>Нашел проблему!!!
>Длинна одной из строк инпута совпадала с длинной массива, сделал динамический масив
>для строки и все заработало. Но вопрос остался, почему malloc не
>мог выделить память и как связаны длинна одного масива даных с
>выделением другого?
>P.S. Прошу прощения за беспокойство из-за такого пустяка. :)


Если с библиотеками все в порядке, то где-то просто портишь память ...