我正在虚拟机中运行程序。我正在执行一个循环,在某个循环中,我调用 strcat。在循环数(这个数字在不同的执行之间发生变化)后,我收到分段错误。
我试图调试它:
(gdb) backtrace
0 0x001a3d5d in strcat () from /lib/tls/i686/cmov/libc.so.6
1 0x080493f4 in ChangetoDnsNameFormat (dns=0xbffef313 "",
host=0xbffff3b8 "a.com", '.' <repeats 195 times>...) at my_dns.c:378
2 0x08048c96 in nreplacehost (
host=0xbffff3b8 "a.com", '.' <repeats 195 times>..., query_type=1,
ip=0xbffff354 "3.3.3.3") at my_dns.c:179
3 0x080489a1 in main (argc=774778414, argv=0xbffff4d4) at my_dns.c:106
(gdb) frame 1
1 0x080493f4 in ChangetoDnsNameFormat (dns=0xbffef313 "",
host=0xbffff3b8 "a.com", '.' <repeats 195 times>...) at my_dns.c:378
378 strcat((char*)host,".");
(gdb) print host
6 = (unsigned char *) 0xbffff3b8 "a.com", '.' <repeats 195 times>...
有小费吗?
这是我调用 strcat 的函数
void ChangetoDnsNameFormat(unsigned char* dns,unsigned char* host)
{
int lock = 0 , i;
strcat((char*)host,".");
for(i = 0 ; i < strlen((char*)host) ; i++)
{
if(host[i]=='.')
{
*dns++ = i-lock;
for(;lock<i;lock++)
{
*dns++=host[lock];
}
lock++; //or lock=i+1;
}
}
*dns++='\0';
}
该函数调用成功超过 1000 次。