c - malloc有什么问题?



即使分配0字节,程序也可以工作。我做错了什么吗?

#include <stdio.h>
#include <stdlib.h>
int main()
{
   char *str;
   printf("memory address of str %p  %pn",&str,str);
   /* Initial memory allocation */
   str = (char*)malloc(0);
   printf("memory address of str %p  %pn",&str,str);
   strcpy(str,"abc");
   printf(" string = %s   %p  %pn", str,&str, str);
   free(str);
   return(0);
}

来自malloc文档:

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

Open Group说:

如果请求的空间大小为0,则行为为实现定义:返回的值要么为null指针或唯一指针。

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

我做错了什么吗?

是的,你做错的事情是:

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

如果你分配0字节,那么你只允许在那里存储0字节。不是4 ('a', 'b', 'c'和结束的空字符)。

分配一些内存意味着为你保留内存,但是即使有些内存没有为你保留,你有时仍然可以对它进行写操作——就像没有什么能阻止你在超市把东西放进别人的手推车里一样。

相关内容

  • 没有找到相关文章

最新更新