Отправляет email-рассылки с помощью сервиса Sendsay

Откуда segmentation fault?

Привет всем!

Имеется ф-ция:
char * get_cur_date(int i)
{
char *s;
time_t *t;
struct tm *ptm;

s = (char *)malloc(16);
time( t );
t += i*24*60*60;
ptm = localtime( t ); //<<<<<<<<<<<
strftime(s, 16 -1, "%b %e", ptm );
return s;
}

При сборке ее с простым драйвером, все тихо-мирно.
Когда вставляю ее в файл кода всей проги, gcc откуда-то берет в обозначенной
строке
warning: assignment makes pointer from integer without a cast
и при запуске проги вылазит сабж. Чего это он, а? :)

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 9329; Возраст листа: 350; Участников: 1207
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/187661



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Matvey Fri, 9 Jul 2004 22:46:04 +0300 (#187661)

 

Ответы:

i386-asplinux-linux-gnu)

On Fri, 9 Jul 2004 22:46:04 +0300
Matvey <mathw***@u*****.fm> wrote:

^^^^^^^^^^

имхо правильней
time_t t;
.....
t = time(NULL);
или
time(&t);
Послений вариант не знаю как поведет себя т.к. всю сознательную жизнь
пользовался только первым :)

вот-вот, а не забыл что у тебя t -указатель?

естественно, читает в невыделенной памяти:((

Ответить   Sat, 10 Jul 2004 06:05:08 +0300 (#187751)

 

On Fri, 9 Jul 2004 22:46:04 +0300
Matvey <mathw***@u*****.fm> wrote:

PS Изменение

time_t *t;
....
time( t );

на

time_t t;
....
t = time( NULL );

ничем не помогло :)
Протупил малость, просто с этим фолтом крутил по-разному, вот и запутался :)

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 9350; Возраст листа: 350; Участников: 1207
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/188071



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Matvey Sat, 10 Jul 2004 11:21:58 +0300 (#188071)

 

Hello Matvey,

Friday, July 9, 2004, 10:46:04 PM, you wrote:

Причина как правило проста - отсутсвует прототип функции, и компилятор
использует прототип по умолчанию - int get_cur_date(...);
Вывод - явно обьявить правильный прототип функции в заголовке
программы (или , что лучше, воспользоваться заголовочным файлом).

SIGSEGV может появится при освобождении/адресации
невыделенной(недоступной) области памяти. Всё-же нужно сделать trace и
узнать где (и при каких параметрах) вызывается появление SIGSEGV.

Ответить   vasile Sun, 11 Jul 2004 12:54:55 +0300 (#188334)

 

On Sun, 11 Jul 2004 12:54:55 +0300
vasile <mail45***@p*****.ru> wrote:

Прототип имеется с самого начала:
char * get_cur_date(int);

Не расскажете, как, потому что в Unix не приходилось проги отлаживать

Остается вопрос - почему ругня на правильное присвоение пойнтера?

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 9391; Возраст листа: 351; Участников: 1208
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/188412



-*Информационный канал Subscribe.Ru
Адрес подписки:
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Отписать: mailto:comp.soft.linux.discuss--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Matvey Sun, 11 Jul 2004 17:04:27 +0300 (#188412)

 

i386-asplinux-linux-gnu)

On Sun, 11 Jul 2004 17:04:27 +0300
Matvey <mathw***@u*****.fm> wrote:

нужен #include <time.h>

иначе прототип localtime представится компилятору как
int localtime(...)

Понятно что вылазит ошибка: возвращаемое значение "вроде бы int",
а вы его указателю присваиваете.
Что и было уже сказано, только про другую функцию :)

Ответить   Sun, 11 Jul 2004 23:39:58 +0300 (#188639)

 

Hello Matvey,
Sunday, July 11, 2004, 5:04:27 PM, you wrote:

можно воспользоваться соотвествующем инструментарием - ltrace, strace,
gdb/ddd.
Когда затруднено использование отладчика, .trace, можно прсто в
контрольных точках наставить fprintf/printk/write которые будут писать
отладочную информацию в лог-файл/терминал (Совет: при использовании
printf/fprintf желательно также вызывать fflush(); особо критичными
являются CGI-приложения).

Ответить   vasile Mon, 12 Jul 2004 11:08:58 +0300 (#188892)