malloc问题一个

timingtimi 2010-03-29 04:02:48
用malloc申请了一个空间后发现长度有误,申请的28字节长度,结果变成了40字节,代码如下
char* HostInfo = NULL;
HostInfo = (char*)malloc(28 * sizeof(char));
int len = strlen(HostInfo); //len值为40

请问怎么回事
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
timingtimi 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jackyjkchen 的回复:]

引用 10 楼 timingtimi 的回复:
引用 8 楼 jackyjkchen 的回复:

VC的debug模式肯定大于你分配的,因为对内存会初始化为0xcd,0x00肯定在合法空间外,release不一定


是debug模式,前28字节是被初始化为0xcd了,我的意思是malloc不会自动在28个字节结束后跟一个0吗?

28字节之后是非法空间
[/Quote]

懂了,多谢,结贴了
jackyjkchen 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 timingtimi 的回复:]
引用 8 楼 jackyjkchen 的回复:

VC的debug模式肯定大于你分配的,因为对内存会初始化为0xcd,0x00肯定在合法空间外,release不一定


是debug模式,前28字节是被初始化为0xcd了,我的意思是malloc不会自动在28个字节结束后跟一个0吗?
[/Quote]
28字节之后是非法空间
timingtimi 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jackyjkchen 的回复:]

VC的debug模式肯定大于你分配的,因为对内存会初始化为0xcd,0x00肯定在合法空间外,release不一定
[/Quote]

是debug模式,前28字节是被初始化为0xcd了,我的意思是malloc不会自动在28个字节结束后跟一个0吗?
lbjfeng 2010-03-29
  • 打赏
  • 举报
回复
上面人说的很正确。

初始化很重要啊&……

menset一下
jackyjkchen 2010-03-29
  • 打赏
  • 举报
回复
VC的debug模式肯定大于你分配的,因为对内存会初始化为0xcd,0x00肯定在合法空间外,release不一定
Eleven 2010-03-29
  • 打赏
  • 举报
回复
囧。。。。。
  • 打赏
  • 举报
回复
strlen 根据\0来判断结束,你没初始化,所以结果是个不确定值
ososo 2010-03-29
  • 打赏
  • 举报
回复
strlen是测试字符串长度的吧.
xiuxianshen 2010-03-29
  • 打赏
  • 举报
回复
杯具了,数组没有初始化的。。。。
pengzhixi 2010-03-29
  • 打赏
  • 举报
回复
你应该去看下strlen的计算方式
BT六眼飞鱼 2010-03-29
  • 打赏
  • 举报
回复
char* HostInfo = NULL;
HostInfo = (char*)malloc(28 * sizeof(char));
if(HostInfo==NULL)
{
throw "Bad Alloc!";
}
memset(HostInfo,0,28);
int len = strlen(cryptHostInfo); //再试试 呵呵 应该是0哦
昵称很不好取 2010-03-29
  • 打赏
  • 举报
回复
……
你没有初始化就是用strlen,出来什么结果都不奇怪~~
你把每个字节都初始化为0,strlen结果就是0

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧