OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4601|回复: 4

关于局部变量数据是否需要释放,恳请指教

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2016-9-7 09:26:31 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 liuchang 于 2016-9-7 09:35 编辑

[mw_shl_code=c,true]void tcp_server_thread(void *arg)
{        
        struct netconn *conn;
        
        conn = netconn_new(NETCONN_TCP);
        netconn_bind(conn, IP_ADDR_ANY, 8080);
        netconn_listen(conn);
        
        while(1)
        {
                uint8_t *buf, flag, info[51];
                uint16_t buflen;
                struct netconn *newconn; //1>我在这里申请了newconn
                struct netbuf *inbuf;
               
                if(netconn_accept(conn, &newconn) != ERR_OK)
                {
                        netconn_close(newconn);
                        netconn_delete(newconn); //2>假如程序能够跑到这里,删除这个局部变量
                        netbuf_delete(inbuf);
                        continue; //3>如果netconn_delete()被注释掉,程序接下来重新进入while(1),                                                                          //会再次创建newconn吗(之前的newconn栈内存会释放吗)?还是会将之前的newconn给覆盖掉?
                }[/mw_shl_code]
问题在程序注释部分,恳请大神指教


电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2016-9-7 10:28:40 | 显示全部楼层
*newconn,*inbuf你这两个指针是野指针,没有实际分配内存,无法使用。如果使用netconn_new(NETCONN_TCP)申请了内存,不主动释放是一直会占用的。
态度决定一切
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-9-7 10:31:33 | 显示全部楼层
newconn貌似没有指向任何实体,netconn_delete能删除吗?局部变量是在进入函数后再栈上申请的,退出函数后,那段栈区域的内容就视为无效,之后的函数使用就直接覆盖,这里我没有理解“释放/删除局部变量”是什么意思
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2770
金钱
2770
注册时间
2015-6-1
在线时间
394 小时
发表于 2016-9-7 10:36:06 | 显示全部楼层
ianhom 发表于 2016-9-7 10:31
newconn貌似没有指向任何实体,netconn_delete能删除吗?局部变量是在进入函数后再栈上申请的,退出函数后 ...

就是说局部变量根本不用主动释放掉是么?
自在随心
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-9-7 10:53:08 | 显示全部楼层
yuzeyuan1 发表于 2016-9-7 10:36
就是说局部变量根本不用主动释放掉是么?

存在于栈上的局部变量不需要程序员主动释放
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 12:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表