qq_52587679 2021-10-09 15:26 采纳率: 80%
浏览 40
已结题

程序运行到malloc为什么突然结束,以前没发生过啊,不知道是哪里出了问题,能给出指点吗

给 栈底分配内存时直接结束,程序运行到malloc为什么突然结束,以前没发生过啊,不知道是哪里出了问题,能给出指点吗

img

img

  • 写回答

1条回答 默认 最新

  • include_iostream_ 2021-10-09 15:42
    关注

    这段代码你犯了至少两个错误。
    第一,第13行,你的s没有初始化。这导致你的程序的s实际上是一个野指针,试图访问野指针指向的对象的成员就会得到段错误,因为s本身的内存还没有得到正确分配。(你程序中第14行分配的是s->base的内存,但由于你的s是指针,你还需要分配s的内存,这两件事不能混为一谈。)
    第二,你的代码并不能指出malloc这行没有执行成功(虽然这个例子下确实是malloc这行导致,但这只是巧合而已)。printf默认是行缓冲,当你的程序触发SIGSEGV(段错误信号)时标准库直接terminate掉进程,你的printf实际上不能指示程序的异常终止位置,因为这种异常终止的情形下,printf的输出行为并不会真正触发。printf实际触发输出的时机有两种:一是内部缓冲区满(积累了较多的东西等待输出),二是强制输出逻辑(遇到回车会触发强制输出,调用fflush函数会起到相同的作用)。
    你需要把第13行改成:sqStack s = (sqStack)malloc(sizeof(sqStack));
    最后再提一个题外话:看来你在读严蔚敏《数据结构》。我们这些工程师都极其不推荐这本书,因为太过古老而且可实践性较差,使用的C语言malloc实际上妨碍了初学者关注算法核心逻辑,而且严书中的实现其实相当ugly,一点也不优雅。我们一般会通过刷题网站、网络博客、网课等入门数据结构,事实上我身边只有竞争力较差的学校的考研学生会为了应试读严书,我认识的优秀工程师中没有一位是从严书入门的。此外,严书由于某些实现相当诡异,充斥着上世纪的落后做法的痕迹,很多地方实际上反而加大了初学者阅读和理解的难度。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月7日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 利用3支股票数据估计其均值和方差的95%置信区间。
  • ¥15 微信小程序运行一项功能时,弹出未知错误弹框,检查代码没有问题
  • ¥15 ATAC测序生成self-pseudo replicates之前是否要进行去线粒体reads
  • ¥15 python模糊字匹配函数问题
  • ¥20 谁刷目标页面的uv记录器上数据,数据只记录跳转的数值
  • ¥30 数据库软件的安装方法
  • ¥15 一道以太网数据传输题
  • ¥15 python 下载群辉文件
  • ¥50 代码还没怎么运行但是需要代码功能调用数据
  • ¥15 vue请求不到数据,返回状态200,数据为html