-
some_memory = (char *)malloc(ONE_K);
-
if (some_memory != NULL)
-
{
-
sprintf(some_memory,"Hello World.\n");
-
printf("%s",some_memory);
-
}
-
re_some_memory = (char *)realloc(some_memory, ONE_K * 2);
-
if (re_some_memory != NULL)
-
{
-
sprintf(re_some_memory + 13,"I will be success.\n");
-
printf("%s",re_some_memory);
-
exit_code = EXIT_SUCCESS;
-
}
-
在第10行上,偏移量为13的时候可以在relloc重新分配的内存空间中写入数据,可是如果偏移量的大于13的时候却没有写入数据。
-
特此请问各位看官,这是什么原因,请不吝赐教。
我的答案:
首先,需要明确一点是数据是已经写进去了。之所以没有被打印出来是因为当printf()函数遇到'\n'了,就将刷新缓冲区,而在'\n'后面的字符还没有读入printf的buff中就已经刷新buff了,所以它们不会被输出
另外,malloc()函数分配的存储中的初始值是不确定的,而realloc()函数则是将原分配区中的内容复制到新分配的存储区中,如果有新增存储区,则它的初始值也是不缺定的。
calloc()则是每一位都将初始化为0
阅读(2537) | 评论(0) | 转发(0) |