免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zqh1630
打印 上一主题 下一主题

[C] 关于while(1)中malloc和free的使用? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2013-04-19 10:07 |只看该作者
回复 20# pmerofc


            while(1){
/*
                memset(pic_name, 0, 100);
                sprintf(pic_name, "%d.jpeg", i++);

                if((fd = open(pic_name, O_WRONLY | O_CREAT)) < 0){
                        printf("open error\n");
                        return -1;
                }
*/
                recv_num = read(sock_fd, re_buf, 2000);

                if(strncmp(re_buf, ipcam_video_trans_proto, 4) == 0)
                {
                        pic_len =  ((uint16_t *)(&re_buf[32]))[0];
                        printf("pic_len = %d\n", pic_len);

                        buf = (uint8_t *)malloc(pic_len);
                        if(buf == NULL){
                                printf("malloc error for pic buf! \n");
                                return -1;
                        }       
                        printf("malloc address buf = %x\n", buf);

                        memset(buf, 0, pic_len);
                       
                        total_num = recv_num - 36;
                                               
                        memcpy(buf, re_buf+36, recv_num-36);

                        while( total_num < pic_len){
                                recv_num = read(sock_fd, re_buf, 2000);
                                memcpy(buf+total_num, re_buf, recv_num);
                                total_num = recv_num + total_num;
                        }
                }
/*
                write(fd, buf, pic_len);

                close(fd);
*/               
                if(buf != NULL){
                        free(buf);
                        printf("free address buf = %x\n", buf);
                        buf = NULL;
                }

        }
       

完整代码!!

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
22 [报告]
发表于 2013-04-19 10:14 |只看该作者
zqh1630 发表于 2013-04-19 10:07
回复 20# pmerofc

pic_len等于多少?                                                
recv_num等于多少?

论坛徽章:
0
23 [报告]
发表于 2013-04-19 15:31 |只看该作者
buf = NULL;
while(1){
   if(condition)
         buf =  malloc();


  if(buf != NULL) {
     free(buf);
     buf = NULL;
  }
}

论坛徽章:
0
24 [报告]
发表于 2013-04-19 18:20 |只看该作者
回复 22# cjaizss


    从网络读数据, 每次跟每次都不一样!!!

论坛徽章:
0
25 [报告]
发表于 2013-04-19 22:08 |只看该作者
也感觉是memcpy出问题了

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
26 [报告]
发表于 2013-04-19 22:10 |只看该作者
zqh1630 发表于 2013-04-19 18:20
回复 22# cjaizss

所以让你打印出来对比啊

论坛徽章:
36
CU大牛徽章
日期:2013-09-18 15:24:20NBA常规赛纪念章
日期:2015-05-04 22:32:03牛市纪念徽章
日期:2015-07-24 12:48:5515-16赛季CBA联赛之辽宁
日期:2016-03-30 09:26:4715-16赛季CBA联赛之北控
日期:2016-03-30 11:26:2315-16赛季CBA联赛之广夏
日期:2016-05-20 15:46:5715-16赛季CBA联赛之吉林
日期:2016-05-24 11:38:0615-16赛季CBA联赛之青岛
日期:2016-05-30 13:41:3215-16赛季CBA联赛之同曦
日期:2016-06-23 16:41:052015年亚洲杯之巴林
日期:2015-02-03 15:05:04CU大牛徽章
日期:2013-09-18 15:24:52CU十二周年纪念徽章
日期:2013-10-24 15:46:53
27 [报告]
发表于 2013-04-20 09:21 |只看该作者
recv_num不一定能大于36,所以recv_num - 36 不靠谱, 还有如果recv_num如果是个unsigned型,就更不靠谱了

论坛徽章:
0
28 [报告]
发表于 2013-04-20 10:09 |只看该作者
回复 25# thaldn


    正解,我快要找到问题根源了!!!

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
29 [报告]
发表于 2013-04-20 13:21 |只看该作者
zqh1630 发表于 2013-04-20 10:09
回复 25# thaldn

以后遇到这种问题,先怀疑自己,写C语言程序没有什么BUG比越界更常见而且难找了。

论坛徽章:
0
30 [报告]
发表于 2013-04-22 09:40 |只看该作者
回复 29# cjaizss


    是啊,突然收到的网络数据变大,导致出的错!!!


这个网络问题没遇到过啊~~

让人蛋疼!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP