当前位置:   article > 正文

使用malloc创建头结点的坑_头结点是malloc

头结点是malloc

首先,malloc()动态内存分配函数,用来向系统请求分配内存空间。当无法知道内存具体的位置时,想要绑定真正的内存空间,就要用到malloc()函数。因为malloc只管分配内存空间,并不能对分配的空间进行初始化,所以申请到的内存中的值是随机的,经常会使用memset()进行置0操作后再使用。  

  与其配套的是free(),当申请到的空间不再使用时,要用free()函数将内存空间释放掉,这样可以提高资源利用率,最重要的是----就是因为它可以申请内存空间,然后根据需要进行释放,才被称为“动态内存分配”!  

void *malloc(int size);

说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。

从函数声明上可以看出。malloc  new 至少有两个不同:

new 可以自动返回指定类型的指针,并且可以自动计算所需要大小。

比如:

int *p;

p = new int;                   //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);

或: 

int* parr;

parr = new int [100];      //返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int) * 100; 

 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。 

int* p; 

p = (int *) malloc (sizeof(int)); 

其次

1.malloc(0)会返回一个非空指针
2.malloc(0)返回的指针,对其使用free不会出错
3.malloc(-1)在vs和vc下运行出错,程序卡死在malloc那一行,linux则编译报错

最后

在创建链表的带头结点时,切记最好用 :

struct ListNode*cur= (struct ListNode*)malloc(sizeof(struct ListNode));

切记不要用struct ListNode*cur=malloc(0);      !!!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/641079
推荐阅读
相关标签
  

闽ICP备14008679号