写堆栈的时候报的奇怪的错。

还是在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就报错了。

原文地址:https://www.cnblogs.com/kakafra/p/2551793.html