The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Особенности FreeBSD ??, !*! mikek, 28-Сен-01, 16:03  [смотреть все]
Если я добавляю эту функцию в сорцы (просто добавляю, я ее даже не вызываю), то Segmentation Fault

--------------
void make_crctable( void ) {
unsigned int i, j;
UCRC r;

for (i = 0; i <= 255; i++) {
r = i;
for (j = 8; j > 0; j--) {
if (r & 1) r = (r >> 1) ^ CRCPOLY;
else r >>= 1;
}
crctable[i] = r;
}
}
-------------

если же я ее заменяю на

--------------
void make_crctable( void ) {
}
-------------

то все работает.

И Все это только во FreeBSD, в Windows и в SUSE Linux все работает и так, и так.

  • RE: Особенности FreeBSD ??, !*! Арлекин, 16:36 , 28-Сен-01 (1)
    Что значит не вызываю? Когда валится-то? До main() что-ли?
  • RE: Особенности FreeBSD ??, !*! Арлекин, 17:22 , 28-Сен-01 (3)
    Не думаю, что это глюк ОСы.
    Кто-то ( библиотеки какие-нить, например ) инициализируется во внешних сегментах, судя по всему, а компилер может пропустил ( глюкавый), может ты предупреждения ему удавил...
    А вот модули по-разному строятся. Потому где-то идёт.
    Не зная всего проекта трудно судить.

    Ябы сделал тупо - закоментарил всё и открывал по логическим кусочкам.
    Мне лично на первый взгляд не нДравится " crctable = r; "
    Поставь заплатки и попробуй.
    Я в основном в солярке трудЮсь, но такие фокусы тоже ловил.

    • RE: Особенности FreeBSD ??, !*! mikek, 18:55 , 28-Сен-01 (4)
      Да я ее несколько раз пересобрал с нуля, у меня уже свой malloc, strdup, free.

      Каждое обращение пишется в спец таблицы. и лог файлы. Я под SUSE все писал. А теперь вот под Фрю надо откомпилить. Уже неделю задницу от стула не отрываю.

    • RE: Особенности FreeBSD ??, !*! mikek, 18:57 , 28-Сен-01 (5)
      [font size="1" color="#FF0000"]Последняя редакция от 28-Сен-01 18:58  ()[/font][p]А что касается

      crctable = r;

      то это кто-то квадратные скобки скушал.

      • RE: Особенности FreeBSD ??, !*! Арлекин, 20:06 , 28-Сен-01 (6)
        Ну переписывать системные вызовы, я считаю не стоило, ибо только они "знают" как ИХ ОСь делает свои дела.
        Я про другое писАл. У тя есть функция, которая ничего не валит если в ней нету тела. Так?
        Значит глюк внутри функции.
        Сначала я сделал бы так: (в моих текстах постоянно плюсы теряются )
        void make_crctable( void ) {

                 unsigned int i, j;
                 UCRC r;
        /*
                 for (i = 0; i <= 255; i  ) {
                 r = i;
                 for (j = 8; j > 0; j--) {
                 if (r & 1) r = (r >> 1) ^ CRCPOLY;
                 else r >>= 1;
                 }
                 crctable = r;
                 }
        */
              }
        Если это пройдет, делаем так:

        void make_crctable( void ) {
                 unsigned int i, j;
                 UCRC r;

                 for (i = 0; i <= 255; i  ) {
                 r = i;
                 for (j = 8; j > 0; j--) {
        ;
        /*
                 if (r & 1) r = (r >> 1) ^ CRCPOLY;
                 else r >>= 1;
        */
                 }
        //         crctable = r;
                 }
                 }

        Плевать на результат - если main() получает управление можно сразу выходить по exit().
        Продолжая таким образом, ты локализуешь область глюка.

        Ну и не мешало бы глянуть, а нет ли функции с таким именем в подключенных библиотеках Фри. Черт его знает их компилер. У меня спарковский очень сильно местами не соответствует стандарту. И еще, ( спарковский так глючит ) не стОит собирать плюсовым компилером С-й код. Может и тут дырка.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру