| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > malloc |
| Автор: MAKCim 28.9.2006, 17:27 | ||
| программа падает c SIGABRT при вызове malloc что за программа не имеет значения - проблема точно локализована - что-то с malloc, причем malloc вызывается в цикле, и падает после 2-ух успешных вызовов вот что glibc пишет
в чем может быть дело? |
| Автор: kirjanov 28.9.2006, 18:32 |
| Этот сигнал сгенерирован, когда недопустимый указатель применяется. Подобно SIGSEGV, этот сигнал - обычно результат применения неинициализированного указателя. |
| Автор: MAKCim 28.9.2006, 22:08 | ||
Да я знаю что это за сигнал и когда он генерируется Вопрос в другом. В чем может быть причина, что вылетает библиотечная функция? |
| Автор: smalcom 29.9.2006, 07:23 |
| >>В чем может быть причина, что вылетает библиотечная функция? может магнитная активность солнца, может изза самостоятельной пересборки glibc или еще какого пакета который косвенно на это влияет. А может прога из нескольких тредов |
| Автор: MAKCim 29.9.2006, 15:49 | ||||||
нет
к моменту вызова поток один |
| Автор: smalcom 29.9.2006, 17:50 |
| приду домой попробую покопать. если не сложно приблизетельно плюс минус две три строки от малока надо увидеть |
| Автор: MAKCim 29.9.2006, 18:50 | ||||||
да в принципе все стандартно
|
| Автор: smalcom 29.9.2006, 20:37 | ||
скомпилил я у ся сей кусок все тип-топ. причина может быть в некоректной работе sizeof или его входных параметров, могу пока порекомендовать поиграть с MALLOC_CHECK_ и кусок кода сделать чуть иначе штобы видеть плотнее что происходит.
|
| Автор: smalcom 30.9.2006, 00:37 |
| я так понял все писяно на сях в коих я не очень попробуй на плюсах хотя интересней разобраца в сути проблемы |
| Автор: kirjanov 30.9.2006, 08:35 |
| MAKCim, поставь бряк на адрес и глянь дизассемблированный код функции. |
| Автор: MAKCim 30.9.2006, 09:36 |
| Спасибо всем за участие - проблема сама собой решилась Самое интересное, что якобы глючный код я не трогал, а слегка изменил совсем другой участок программы Вот все как взаимосвязано оказывается |
| Автор: smalcom 30.9.2006, 13:26 |
| >>> Да я знаю что это за сигнал и когда он генерируется <<< Накричал тут значит >>> проблема точно локализована - что-то с malloc <<< наехал на glibc(как програмист под винду ей-богу - раз моя прога не работает значит вонь is sux) P.S. хоть бы сказал в чем дело было, а вдруг завтра я или еще кто тупо опять сидит перед дебаггером кроет матом glibc задалбывает форумы и знакомых по аське палит кучу трафика, а ведь можно всего было избежать. Ща погибнет весь автобус |
| Автор: MAKCim 30.9.2006, 14:54 | ||||
Понимаешь в чем дело, ошибка то вылетала именно в malloc-е Это было четко видно по логам и в gdb, так что наезды не беспочвенны (может, даже скорее всего, malloc валился из-за косвенных, не относящихся к самой glibc, причин - но внешне все сводилось к ошибке в malloc-е) Прежде чем сюда писать я досконально все проверил, не из-за кривизны ли моих рук все валится
Я и сам не знаю, тот кусок, который исправил, не влиял на кусок кода, который падал Так что сказать ничего не могу...пока |
| Автор: regis 2.10.2006, 11:21 |
| Судя по всему, запорчены были заголовки блоков памяти кучи, о чем malloc прямо и сообщает. Ошибка, конечно, не в malloc, а где-то в другом месте программы. Стоит проверить все критичные операции записи через указатели, если не поможет -- использовать для отладки что-нибудь вроде ElectricFence. |
| Автор: MAKCim 2.10.2006, 15:36 | ||
Боюсь времени нет, тем более все работает Хотя было бы интересно |
| Автор: dmiceman 3.10.2006, 02:12 |
| о да! обожаю такие ошибки! помнится во времена когда ничего вроде efence небыло, отлавливал я такого рода багу неделю. не помню уже -- отловил или нет :-) рождается такая бага обычно совсем другом месте программы, совсем в другом исходнике, минут за пять до славливания сигнала. и тихо ждет своего часа. это может быть что угодно -- от переполнения на один байт, от непоставленного нолика в конце строки после strncpy(), все что угодно. даже совсем не обязательно в твоем коде. но! времена меняются. попробуй просто прогнать прожку под valgrind -- десять к одному он тебе все расскажет и на блюдечке принесет. |