malloc()分配空间不初始化会出现什么问题?

kwqjay 2009-10-19 01:55:35
函数malloc()和函数calloc()的主要区别是前者不能初始化所分配的内存空间,而后者能。如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留有各种各样的数据。也就是说,使用malloc()函数的程序开始时(内存空间还没有被重新分配)能正常进行,但经过一段时间(内存空间还已经被重新分配)可能会出现问题。

网上好多都这么说的, 请问一下高手,
可能会出现什么问题呢???
...全文
1272 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
febbird1984 2010-03-02
  • 打赏
  • 举报
回复
一般编译器会自动初始化成固定的值,但里面的值一般不会是你想要的
譬如VS2008下面的代码
	
int *a=(int*)malloc(8);
char *b=(char*)malloc(2);
printf("%x\t%x\n",*a,*(a+1));
printf("%x\t%x\n",*b,*(b+1));
free(b);
free(a);

运行结果为
cdcdcdcd cdcdcdcd
ffffffcd ffffffcd
可以猜想每个字节都被初始化为0xcd
lzh3ng 2010-03-02
  • 打赏
  • 举报
回复
引用 5 楼 cy330206 的回复:
基本上要用到malloc的都可以初始化的(memset可以用)

就是
cy330206 2010-03-02
  • 打赏
  • 举报
回复
基本上要用到malloc的都可以初始化的(memset可以用)
forster 2010-03-02
  • 打赏
  • 举报
回复
你不假定他都是0 就没问题
qinying0120 2010-03-02
  • 打赏
  • 举报
回复
如果你能保证对变量(尤其是指针)都赋值后使用,应该是没问题的~~
kwqjay 2009-10-19
  • 打赏
  • 举报
回复
但是动态分配空间后,我们应该会对结构体里的变量进行赋值的吧!

应该不会分配完空间后,就马上直接使用的吧

我是初学者,向高手们请教。
ArrayTang 2009-10-19
  • 打赏
  • 举报
回复
没有初始化的内存中内容是随机的,所以如果直接使用的话,就可能造成程序运行结果不正确,甚至crash.

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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