这可能是也可能不是您的问题?
仍然没有足够的信息来确定你在做什么。
我会认为本地时间不是问题,但在 printfs 的某个地方存在问题。 . .
你是如何编译你的项目的?
g++ 还是 gcc?
你能打印一个字符串吗? (相对于字符串 ptr)
你的上下文中的字符串是什么?
这里有1个问题:
fprintf(stdout,"# Single electron capture cross sections, %s state-selective\n",res);
如果 string 是 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
* 更多 JUNK 跟随
res 字符串本身不能在堆栈中传入和打印 *
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 以跟踪进程执行的所有 lib 调用。
试试:
strace ls
ltrace ls
关于我的崩溃示例:
ltrace ./socrash 1>stdout.log 2>socrash_ltrace.log
less socrash_ltrace.log