Это может быть или не быть чем-то близким к вашей проблеме? По-прежнему недостаточно информации, чтобы быть уверенным в том, что вы делаете. Я бы подумал, что проблема не в локальном времени, но где-то в printfs есть проблемы. . .
Как вы составляете свой проект? g ++ или gcc?
Вы можете напечатать строку ?? (в отличие от строки ptr) Что такое строка в вашем контексте?
Здесь 1 проблема:
fprintf(stdout,"# Single electron capture cross sections, %s state-selective\n",res);
Если строка - это typedef a char [], тогда было бы лучше передать указатель на нее в func args?
Компиляция вашего образца с некоторыми предположениями и добавлением отладки (-g3):
gcc -g3 stackoverflow_localtime_crash.c -o socrash
./socrash
# Single electron capture cross sections, RESSTRING state-selective
# Magic number=20032014, 20 March 2014,
# Single electron capture cross sections, RESSTRING state-selective
# ^0+ + -> ^-1+ + ^+
# Method=MCLZ
# et al. 2014, to be submitted
# ----------------------------------------------------------------------------
# Energy Cross sections (10^-16 cm^2)
# (eV/u) LABELSTRING �H���u�j
* За строкой res следует еще больше JUNK, которую нельзя передать в стек и распечатать *
Segmentation fault (core dumped)
gdb -c core socrash
Core was generated by `./socrash'.
Program terminated with signal 11, Segmentation fault.
[New process 10298]
#0 0xb770e713 in strlen () from /lib/tls/i686/cmov/libc.so.6
(gdb) bt
#0 0xb770e713 in strlen () from /lib/tls/i686/cmov/libc.so.6
#1 0xb76da6d9 in vfprintf () from /lib/tls/i686/cmov/libc.so.6
#2 0xb76e0b9f in fprintf () from /lib/tls/i686/cmov/libc.so.6
#3 0x08048a42 in prtcsheader (cs=0xbf9e907c, labels=0xbf9e90bc, res=0xbf9e90a8 "RESSTRING") at stackoverflow_localtime_crash.c:66
#4 0x08048b36 in main (argc=Cannot access memory at address 0x0
) at stackoverflow_localtime_crash.c:80
(gdb) list
64 fprintf(stdout,"%-15s","# (eV/u)");
65 for(i=0;labels[i]!=NULL;i++)
66 fprintf(stdout,"\t%-14s",labels[i]);
67 fprintf(stdout,"\t%-14s","Total");
68
69 return 0;
(gdb)
* см. строку 66, там тоже проблема * вполне может быть так, как я объявил строку :-P
66 fprintf(stdout,"\t%-14s",labels[i]);
* Если вы можете найти файл ядра самостоятельно, это будет большим подспорьем !!! *
Если вы не можете найти ядро, возможно, вы могли бы использовать ltrace. Запустите strace, чтобы получить трассировку всех системных вызовов, которые выполняет процесс. Запустите ltrace, чтобы получить трассировку всех вызовов библиотеки, которые выполняет процесс.
Пытаться:
strace ls
ltrace ls
В моем примере сбоя:
ltrace ./socrash 1>stdout.log 2>socrash_ltrace.log
less socrash_ltrace.log
person
gaoithe
schedule
20.03.2014
localtime()
разбился? - person chux - Reinstate Monica   schedule 20.03.2014printf
операторов, чтобы изолировать строку в коде, вызвавшую ошибку. - person Mannix   schedule 20.03.2014printf()
могут возникнуть ошибки из-заprintf()
. 2) Рассмотримstruct tm mytime; mytime = *localtime(&now); if (0==strftime(yyyy, sizeof(yyyy), "%Y", &mytime)) Handle_Error();
- person chux - Reinstate Monica   schedule 20.03.2014