Если я добавляю эту функцию в сорцы (просто добавляю, я ее даже не вызываю), то 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 все работает и так, и так.
Что значит не вызываю? Когда валится-то? До main() что-ли?
угу
Не думаю, что это глюк ОСы.
Кто-то ( библиотеки какие-нить, например ) инициализируется во внешних сегментах, судя по всему, а компилер может пропустил ( глюкавый), может ты предупреждения ему удавил...
А вот модули по-разному строятся. Потому где-то идёт.
Не зная всего проекта трудно судить.Ябы сделал тупо - закоментарил всё и открывал по логическим кусочкам.
Мне лично на первый взгляд не нДравится " crctable = r; "
Поставь заплатки и попробуй.
Я в основном в солярке трудЮсь, но такие фокусы тоже ловил.
Да я ее несколько раз пересобрал с нуля, у меня уже свой malloc, strdup, free.Каждое обращение пишется в спец таблицы. и лог файлы. Я под SUSE все писал. А теперь вот под Фрю надо откомпилить. Уже неделю задницу от стула не отрываю.
[font size="1" color="#FF0000"]Последняя редакция от 28-Сен-01 18:58 ()[/font][p]А что касается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;
}
*/
}
Если это пройдет, делаем так: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().
Продолжая таким образом, ты локализуешь область глюка.Ну и не мешало бы глянуть, а нет ли функции с таким именем в подключенных библиотеках Фри. Черт его знает их компилер. У меня спарковский очень сильно местами не соответствует стандарту. И еще, ( спарковский так глючит ) не стОит собирать плюсовым компилером С-й код. Может и тут дырка.
>Ну и не мешало бы глянуть,
>а нет ли функции с
>таким именем в подключенных библиотеках
>Фри.Именно в этом и дело. Спасибо, я разобрался.