免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1669 | 回复: 7
打印 上一主题 下一主题

请大家看一下,这段代码不会出现内存泄露吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-10 11:28 |只看该作者 |倒序浏览
请大家看一下,这段代码不会出现内存泄露吧
        int len = 10;
        char name[] = "1234567890"
        struct entry_t{
                char *name;
                int len; //姓名长度
        } *my_entry;
       
        my_entry = (struct entry_t *)malloc(sizof(entry_t) + len + 1);
        my_entry->name = my_entry + sizeof(entry_t);
        my_entry->len = len;
        strcpy(my_entry->name, name);
        ……
        free(my_entry);

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-09-10 11:34 |只看该作者
不会.. 不过要注意
1. my_entry->name[len] = '\0'
2. strncpy (my_entry->name, name, len);

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-09-10 11:35 |只看该作者
应该没问题

论坛徽章:
0
4 [报告]
发表于 2008-09-10 11:48 |只看该作者
原帖由 xiao1tong1 于 2008-9-10 11:28 发表
请大家看一下,这段代码不会出现内存泄露吧
        int len = 10;
        char name[] = "1234567890"
        struct entry_t{
                char *name;
                int len; //姓名长度
        } *my_entry;
       
        my_entry = (struct entry_t *)mall ...



        int len = 10;
        char name[] = "1234567890"
        struct entry_t{
                int len; //姓名长度

                char name[];
        } *my_entry;
        
        my_entry = (struct entry_t *)malloc(sizof(entry_t) + len + 1);
        my_entry->len = len;
        strncpy(my_entry->name, name, len);
        ……
        free(my_entry);

论坛徽章:
0
5 [报告]
发表于 2008-09-10 11:54 |只看该作者
谁保证malloc就一定申请成功?写代码严谨些好

论坛徽章:
0
6 [报告]
发表于 2008-09-10 12:22 |只看该作者
原帖由 xiao1tong1 于 2008-9-9 19:28 发表
请大家看一下,这段代码不会出现内存泄露吧
        int len = 10;
        char name[] = "1234567890"
        struct entry_t{
                char *name;
                int len; //姓名长度
        } *my_entry;
       
        my_entry = (struct entry_t *)mall ...


这样是可以的,还见过 0 长数组:

struct entry_t {
  int len;
  char name[0];
};
这样malloc了足够内存后可以省掉对name的赋值。

论坛徽章:
0
7 [报告]
发表于 2008-09-10 12:48 |只看该作者
        int len = 10;  
        char name[] = "1234567890"
        struct entry_t{
                char *name;
                int len; //姓名长度
        } *my_entry;
        
        my_entry = (struct entry_t *)malloc(sizof(entry_t) + len + 1); // 需要判断malloc成功(使用int len=10,不如直接使用sizeof(name) )
        my_entry->name = my_entry + sizeof(entry_t); //错误!!!应该是 (char *)(my_entry + 1)
        my_entry->len = len;
        strcpy(my_entry->name, name);     //应该使用strncpy
        ……
        free(my_entry);  // 这里不会内存泄漏

程序里由一个错误

论坛徽章:
0
8 [报告]
发表于 2008-09-10 12:51 |只看该作者
原帖由 xiaonanln 于 2008-9-9 20:48 发表

程序里由一个错误


楼主是在考大家吗?呵呵。
长度10不够吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP