关于malloc使用的一些问题。

最近在看严版的数据结构,有一些不是很懂。
在对单链表进行插入等操作,需要生成新节点时,并没有检查malloc的返回值。
而在顺序表,栈以及队列中,使用malloc分配内存空间时,都有对其进行返回值的检查。
且当对双链循环链表进行相关操作时,却又检查了malloc的返回值。

还有一点,在检查到malloc开辟失败后,双链循环链表采用了return,而不是exit。

问题1:malloc返回值的检查取决于什么?是所开辟内存大小与安全性的权衡?
问题2:exit()与return()的区别?

图片说明双链循环链表

图片说明队列

图片说明顺序表

图片说明顺序栈

图片说明链表

第一个的是给双链表的内存吧,如果超出了就会ERROR

1、malloc用于分配储存空间 当分配成功返回bool型1 分配失败返回bool型0 ,!return error也就是说只有分配空间成功才有必要执行下去。
2、exit()返回错误信息,exit(0)是正常返回 ,不受限于返回类型,return()返回函数值,受限于函数的返回类型.

谁说的malloc返回的是bool型,malloc返回的是void*类型,分配成功返回的是分配的内存地址,分配失败返回的是NULL,只是指针类型可以进行逻辑运算而已

Mr_dogyang这位完全是乱讲,exit表示的是退出进程,程序终止。 return表示的是函数返回,终止函数的运行,return的返回值类型与函数声明类型必须一样,如果函数声明返回值为void,return后面不用加返回值。
void my_printf(int a)
{
if(a<0)
return;
printf("%d\n", a);
}

void my_printf1(int a)
{
if(a<0)
exit(0);
printf("%d\n", a);
}

//call my_printf
int main(void)
{
my_printf(-1);//-1小于0,因此不会有输出,但是程序会继续执行下面的函数。
my_printf(3);//输出: 3
}

//call my_printf1
int main(void)
{
my_printf1(-1);//-1小于0,进程会退出,所有后面的代码都不会被执行。
my_printf1(3);//永远不会执行
}

return跟exit区别差不多就是ranyixu11 说的那样,
malloc()封装了mmap()函数,mmap()最低给了malloc() 33块.一块4k大小,一般是不太会出现分配失败,但是当内存不足的时候肯定会出现失败,返回NULL指针

严格按规范来讲,malloc后都需要进行返回值检查,可能是作者遗漏。