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

  • Post author:
  • Post category:其他


很多嵌入式c面试,会问到这个问题,我也就百度了下,集合几位网友的分析,记录下来,便于我自己随时查看

当malloc分配内存时它除了分配我们指定SIZE的内存块,还会分配额外的内存来存储我们的内存块信息,用于维护该内存块。因此,malloc(0)返回一个合法的指针并指向存储内存块信息的额外内存,我们当然可以在该内存上进行读写操作,但是这样做了会破坏该内存块的维护信息,因此当我们调用free(ptr)时就会出现错误

ptr = malloc(0*sizeof(char)) ;

ptr是局部指针变量,存储在栈中,它的值是动态分配的一块堆中的空间的首地址

所以说这个地址是合法的,但是由于malloc的大小是0,故这个这个地址指向的堆中的存储空间的大小是0,

这个指针类似于一个野指针,可以使用的,但是是有风险的,因为不知道这个指针后面的内存空间被谁使用着,要是被核心进程使用,哪肯定会造成相应程序的崩溃

关于加上free后,程序会崩溃,我理解是由于在堆中并没有对应的空间分配到导致的~

#include

#include

#include

int main()

{

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 ;

}