博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
做leetcode过程中遇到heap-use-after-free问题的解决方法
阅读量:2436 次
发布时间:2019-05-10

本文共 1864 字,大约阅读时间需要 6 分钟。

heap-use-after-free

  • 背景:leetcode 25 K个一组翻转链表
  • 用了很长时间解决这个问题,过程中心态甚至有一点小小波动。

问题截图:

在这里插入图片描述

  • 问题解释:堆在释放后使用,意思是我使用了释放后的空间吗??(看了程序没有发现问题)
  • 由于之前没有遇到过类似问题,所以选择了在网上寻找答案,看看有没有遇到相同问题的同学分享经验:
    发现有位同学分享的是delete之后再次使用空间,就会报相同错,可是我并没有使用delete。
  • 再找了一会发现没有能利用的,大多是对于这个错误的解释和工具使用方法,所以选择自己寻找错误位置然后解决。

错误代码及测试用例:

/** - Definition for singly-linked list. - struct ListNode { -     int val; -     ListNode *next; -     ListNode(int x) : val(x), next(NULL) {} - }; */class Solution {
public: ListNode* reverseKGroup(ListNode* head, int k) {
ListNode *res=new ListNode; ListNode *p=head,*r=head;; ListNode *q=res; stack
s; while(p!=NULL){
int n=k; while(n){
if(p==NULL){
while(r){
q->next=r; r=r->next; q=q->next; } return res->next; } s.push(p); p=p->next; n--; } while(!s.empty()){
q->next=s.top(); s.pop(); q=q->next; } if(p==NULL) return res->next; r=p; } return res->next; }};出错测试用例:[1,2]2经过多次测试发现,只要是链表长度能被K整除就出错,也就是入栈循环结束后p为null

寻错过程:

  1. 在程序过程中使用return res来定位出错的位置。(print大法芜湖~)
  2. 在while(n)循环结束后使用,程序可以运行
  3. 在while(!s.empty())循环结束后运行,出错。由此确定错误出在出栈循环运行中
  4. 在while(!s.empty())循环中使用,发现第一次循环后并不会出错
  5. 将while循环换成for的形式,发现在第二次循环(其实是最后一次,因为这道题k是2所以是第二次),也就是链表反转完出错。
    出错时链表情况:p为空,无指向,结果链表中有一个环,环由最后一组参与反转的结点组成。
    由此推测出现错误的原因:
  • 没有指向NULL的结点(原因还在探寻,是因为单链表没有结束的标志吗??)

解决方法:在结点出栈的时候使出栈结点指向NULL

解决后成功运行的代码(改动部分):

for(int i=0;i
next=s.top(); // if(i==1) return res; s.pop(); q=q->next; q->next=NULL; // if(i==1) return q; }

转载地址:http://jiemb.baihongyu.com/

你可能感兴趣的文章
一张图搞定Java面向对象
查看>>
DOORS需求管理工具的其他资料
查看>>
使用 Rational RequisitePro 进行需求管理的新技术
查看>>
最新解决方案助力Borland ALM亚太应用
查看>>
Borland ALM之需求定义和管理解决方案
查看>>
需求管理详解
查看>>
Verizon选择Borland控制开发流程并降低风险
查看>>
Borland 崭新的Caliber Define IT产品
查看>>
IBM Rational RequisitePro集成简介
查看>>
集成 IBM Rational RequisitePro 与 IBM Rational Portfolio Manager
查看>>
OOAD利器Rational Rose的介绍
查看>>
SCA客户端以及基于Java的模型实现(一)
查看>>
后CMMI时代的软件过程改进
查看>>
SCA及未来软件系统的开发
查看>>
CaliberRM 需求管理系统
查看>>
需求管理工具试用 – CaliberRM
查看>>
一年的测试生活和感悟
查看>>
黑盒测试
查看>>
没有需求就没有软件——需求工程简论
查看>>
使用PHP开发SCA和SDO
查看>>