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 关于大棚监测的pcb板设计
  • ¥20 sim800c模块 at指令及平台
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计