2011-09-20 81 views
1

我在我的程序中遇到段错误,并试图通过gdb检测源码。解释gdb输出

O/gdb的的p是如下:

[Switching to Thread 0xb6dffb70 (LWP 6448)] 
#0 0x00adc026 in __strlen_sse2_bsf() from /lib/libc.so/6 
#1 0x08049e77 in sim_txn (fd=0x804c5c0) at rand_trace0.c:390 

,并在rand_trace0.c:390我也行

system_call_length = strlen("rename(")+strlen(filename1)+strlen(",")+strlen(filename)+strlen(")")+1; 

一切似乎才奏效。 我不知所措。

+1

'filename1'的值是什么? (不是指针,而是指向它的数据,直到终止'0'。) –

+1

检查文件名和文件名1。他们有效的C字符串? –

+3

那一行是乱七八糟的,为什么不用sprintf来以更清晰的方式创建行,那么strlen()的结果呢? –

回答

4

filename1filename这两个指向空字符结尾字符串的有效指针?您可能会因此得到段错误的最常见原因是您的指针未正确初始化,或者其中一个字符串未以空值终止(可能是因为缓冲区溢出),从而导致strlen()尝试读取过去分配内存的大小。