malloc有什么问题?

时间:2016-08-21 17:30:39

标签: c memory malloc

即使我分配了0字节,程序也能正常工作。我做错了什么?

#include <stdio.h>
#include <stdlib.h>
int main()
{
   char *str;

   printf("memory address of str %p  %p\n",&str,str);
   /* Initial memory allocation */
   str = (char*)malloc(0);

   printf("memory address of str %p  %p\n",&str,str);
   strcpy(str,"abc");
   printf(" string = %s   %p  %p\n", str,&str, str);
   free(str);

   return(0);
}

2 个答案:

答案 0 :(得分:2)

来自https://gist.run/?id=5d047c561cf5973cf98e88bae12f4b4e文档:

  

如果size为零,则返回值取决于特定库   实现(它可能是也可能不是空指针),但返回   指针不得解除引用。

malloc说:

  

如果请求的空间大小为0,则行为为   implementation-defined:返回的值应为null   指针或唯一指针。

这意味着当size为0时,malloc()返回NULL或可以在之后释放的唯一指针。

答案 1 :(得分:0)

  

我做错了吗?

是的,你做错了是:

str = (char*)malloc(0);
strcpy(str,"abc");

如果分配0个字节,那么只允许存储0个字节。不是4('a','b','c'和终止空字符)。

分配一些内存意味着为你保留这些内存,但即使没有为你保留一些内存,你有时仍然可以写信给它 - 就像没有什么能阻止你把物品放在超市的别人手推车上一样。