ckxkobe
ckx_cxy
2017-11-14 14:37
采纳率: 0%
浏览 1.4k

关于malloc使用的一些问题。

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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

11条回答 默认 最新

  • ckxkobe
    ckx_cxy 2017-11-14 14:39

    图片说明双链循环链表

    点赞 评论
  • ckxkobe
    ckx_cxy 2017-11-14 14:39

    图片说明队列

    点赞 评论
  • ckxkobe
    ckx_cxy 2017-11-14 14:40

    图片说明顺序表

    点赞 评论
  • ckxkobe
    ckx_cxy 2017-11-14 14:40

    图片说明顺序栈

    点赞 评论
  • ckxkobe
    ckx_cxy 2017-11-14 14:41

    图片说明链表

    点赞 评论
  • rdguo
    rdguo 2017-11-14 14:49

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

    点赞 评论
  • qq_36112576
    Mr_dogyang 2017-11-15 00:01

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

    点赞 评论
  • ranyixu11
    doggy_coder 2017-11-15 07:27

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

    点赞 评论
  • ranyixu11
    doggy_coder 2017-11-15 07:42

    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);//永远不会执行
    }

    点赞 评论
  • tjl121314
    金羊座 2017-11-15 09:11

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

    点赞 评论
  • ranyixu11
    doggy_coder 2017-11-16 02:44

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

    点赞 评论

相关推荐