免费注册 查看新帖 |

Chinaunix

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

[C] 请教大家个问题,遇到难题了。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-14 15:04 |只看该作者 |倒序浏览
int recvfd;   // 一个网络套接字
        char bufTmp[ 17 ];
        char *strp = NULL;
        char *ptmp = NULL;
        int len = 0;
        memset(bufTmp, '\0', sizeof(bufTmp));

        while((n = read(recvfd, bufTmp, 16)) > 0)
        {
                printf("n=[%d]\n", n);
                ptmp = (char*)realloc(strp, (16 + len) * sizeof(char));    // 问题在这里,原来只有一个“16”希望看到的可以起到提醒的作用
                if (!ptmp)
                {
                        free(strp);
                        return -1;
                }
                strp = ptmp;
                printf("len[%d]\n", len);
                memcpy(strp + len, bufTmp, 16);
                printf("strp[%s]\n", strp);
                len += n;
                n = 0;
                memset(bufTmp, '\0', sizeof(bufTmp));
        }
        *buf = strp;
===============================================
在第三次realloc时coredump段错误,费解。。。
我把memcpy那行注释掉就OK,但业务上等于零。。。
高手帮我看看怎么回事!谢谢!

[ 本帖最后由 linux_ha 于 2010-1-14 16:17 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2010-01-14 15:28 |只看该作者
找到原因了。。。

论坛徽章:
0
3 [报告]
发表于 2010-01-14 15:40 |只看该作者
是我对realloc理解有误,汗啊!其长度应该是累计的,而不是新增的,开始我以为是后者,被折磨了一通

论坛徽章:
0
4 [报告]
发表于 2010-01-14 16:09 |只看该作者

回复 #1 linux_ha 的帖子

The realloc() function shall change the size of the memory object pointed to by ptr to the size specified by size.

每次只分配16个字节肯定不够

论坛徽章:
0
5 [报告]
发表于 2010-01-14 16:18 |只看该作者

回复 #4 huangwei0413 的帖子

这个倒并非关键。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP