zoukankan      html  css  js  c++  java
  • 写堆栈的时候报的奇怪的错。

    还是在destory的时候报的错,报错信息如下:

    发现问题:
    Windows 已在 SqStack.exe 中触发一个断点。
     
    其原因可能是堆被损坏,这说明 SqStack.exe 中或它所加载的任何 DLL 中有 Bug。
     
    原因也可能是用户在 SqStack.exe 具有焦点时按下了 F12。
     
    输出窗口可能提供了更多诊断信息。
    ----------------------------------
    确实百思不得其解,心想:堆怎么被我破坏了,什么时候破坏的呢,哎!没办法,只能一行一行看。
    结果发现:
    realloc的时候破坏了堆的结构,将指针移到了堆区的上面了,所以destroy的时候报错了。
    错误的代码块是:
    Status push(SqStack *s,ElemType e){
    	if(s->top-s->base == STACK_INIT_SIZE){
    		s->base = (ElemType*)realloc(s->base,(s->stacksize+STACK_INCREMENT)*sizeof(ElemType));
    		if(!s->base){
    			exit(OVERFLOW);
    		}
    		s->top = s->base + s->stacksize;
    		s->stacksize+=STACK_INCREMENT;
    	}
    	*s->top++ = e;
    	return OK;
    }
    

    错误的地方就是:if(s->top-s->base == STACK_INIT_SIZE){了,只要超过了初始的栈大小,就会错。

    出错的地方还是使用堆以外的内存。在free的时候,由于这些内存不是malloc管理的,所以free就报错了。

  • 相关阅读:
    下载文件
    文件上传后台
    触发器
    存储过程
    火狐浏览器不能获取 event,解决js报错问题
    Oracle 数据库--一个用户同步的sql
    基于二进制的权限控制
    自定义jsp标签
    http,socket和websocket
    正向代理和反向代理
  • 原文地址:https://www.cnblogs.com/kakafra/p/2551793.html
Copyright © 2011-2022 走看看