linpanliu 2016-10-11 08:44 采纳率: 0%
浏览 929

malloc的地址,怎么从函数返回之后丢失了。

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函数赋值的,但是这时候值变成越界的了,为什么啊,请大神指点下,谢谢~!

  • 写回答

1条回答 默认 最新

  • devmiao 2016-10-11 13:06
    关注

    调试下看看地址方面的问题

    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用