c语言malloc返回值,malloc(0)的返回值

c语⾔malloc返回值,malloc(0)的返回值
很多嵌⼊式c⾯试,会问到这个问题,我也就百度了下,集合⼏位⽹友的分析,记录下来,便于我⾃⼰随时查看
当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额外的内存来存储我们的内存块信息,⽤于维护该内存块。因
此,malloc(0)返回⼀个合法的指针并指向存储内存块信息的额外内存,我们当然可以在该内存上进⾏读写操作,但是这样做了会破坏该内存块的维护信息,因此当我们调⽤free(ptr)时就会出现错误
ptr = malloc(0*sizeof(char)) ;
ptr是局部指针变量,存储在栈中,它的值是动态分配的⼀块堆中的空间的⾸地址
所以说这个地址是合法的,但是由于malloc的⼤⼩是0,故这个这个地址指向的堆中的存储空间的⼤⼩是0,
这个指针类似于⼀个野指针,可以使⽤的,但是是有风险的,因为不知道这个指针后⾯的内存空间被谁使⽤着,要是被核⼼进程使⽤,哪肯定会造成相应程序的崩溃
关于加上free后,程序会崩溃,我理解是由于在堆中并没有对应的空间分配到导致的~
#include
#include
#include
int main()
{aaaaaaaaaaaaaaaaaa
char *ptr ;
ptr = malloc(0*sizeof(char)) ;
if (NULL == ptr)
printf("got a NULL pointer/n");
else
{
printf("got a Valid pointer/n");
strcpy(ptr,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
printf("the string at %p is :%s/n",ptr, ptr);
// free(ptr);
}
return 0 ;
}

本文发布于:2024-09-23 15:28:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/360809.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:内存   指针   分配
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议