Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43935
  • 博文数量: 4
  • 博客积分: 35
  • 博客等级: 民兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-18 15:36
文章分类
文章存档

2013年(1)

2012年(3)

我的朋友

分类: C/C++

2013-03-13 10:49:39

  1.                 some_memory = (char *)malloc(ONE_K);
  2.                 if (some_memory != NULL)
  3.                 {
  4.                                 sprintf(some_memory,"Hello World.\n");
  5.                                 printf("%s",some_memory);
  6.                 }
  7.                 re_some_memory = (char *)realloc(some_memory, ONE_K * 2);
  8.                 if (re_some_memory != NULL)
  9.                 {
  10.                                 sprintf(re_some_memory + 13,"I will be success.\n");
  11.                                 printf("%s",re_some_memory);
  12.                                 exit_code = EXIT_SUCCESS;
  13.                 }
  14. 在第10行上,偏移量为13的时候可以在relloc重新分配的内存空间中写入数据,可是如果偏移量的大于13的时候却没有写入数据。
  15. 特此请问各位看官,这是什么原因,请不吝赐教

我的答案:
首先,需要明确一点是数据是已经写进去了。之所以没有被打印出来是因为当printf()函数遇到'\n'了,就将刷新缓冲区而在'\n'后面的字符还没有读入printf的buff中就已经刷新buff了,所以它们不会被输出
另外,malloc()函数分配的存储中的初始值是不确定的,而realloc()函数则是将原分配区中的内容复制到新分配的存储区中,如果有新增存储区,则它的初始值也是不缺定的。
calloc()则是每一位都将初始化为0


阅读(2537) | 评论(0) | 转发(0) |
0

上一篇:关于C函数调用的一些理解

下一篇:没有了

给主人留下些什么吧!~~