char * get_rec_ip()
{
char *ip = NULL;
int ret = -1;
/* Open INI file */
ret = OpenIniFile(REC_CONF_FILE);
if (ret < 0)
{
return NULL;
}
/* Get IP address from INI file */
ip = (char *) malloc(sizeof (char) * MAX_IPADDR_LENS);
ret = GetIniString("RECORDER", "IP_ADDR", ip);
if (ret < 0)
{
if (ip)
{
free(ip);
}
return NULL;
}
/* Close INI File */
ret = CloseIniFile();
if (ret < 0)
{
if (ip)
{
free(ip);
}
return NULL;
}
return ip;
}
在getVcrConfig()中调用get_rec_ip()给指针赋值
char *ipaddr = get_rec_ip();
if (ipaddr == NULL)
{
sprintf(pResponse->payload, "0.0.0.0:0\n");
goto out;
}
调用这个函数给ipaddr这个指针赋值,使用gdb跟踪程序发现在get_rec_ip函数中确实已经赋值了,但是从函数返回后,ipaddr的值就不正确了,请看下图的gdb调试。
gdb在get_rec_ip函数中的情况
(gdb) p ip
$4 = 0x7f38b8000b40 "192.168.18.223"
(gdb) n
[Thread 0x7f38e27ef700 (LWP 373) exited]
[New Thread 0x7f38e266e700 (LWP 403)]
1305 in src/reclib.c
(gdb) n
1314 in src/reclib.c
(gdb) p ip
$5 = 0x7f38b8000b40 "192.168.18.223"
gdb显示ip的值都是正常的。
跳出get_rec_ip()函数之后
(gdb) n
getVcrConfig (fd=35, cmd=0x7f38e296f950) at src/aacp.c:4794
4794 src/aacp.c: No such file or directory.
in src/aacp.c
(gdb) p ipaddr
$7 = 0xffffffffb8000b40
(gdb)
ipaddr是用get_rec_ip函数赋值的,但是这时候值变成越界的了,为什么啊,请大神指点下,谢谢~!