什么是堆栈溢出错误?

什么是堆栈溢出错误,原因是什么,我应该如何处理

参数和局部变量在堆栈上分配(对于引用类型,对象位于堆上,堆栈中的变量引用堆上的该对象)。堆栈通常位于地址空间的上端端,当它用完时,它朝向地址空间的底部(即朝向零)

您的进程还有一个,它位于进程的底部。当您分配内存时,这个堆可以向地址空间的上端增长。正如您所看到的,堆有可能与堆发生碰撞(有点像板块!!!)

堆栈溢出的常见原因是错误的递归调用。通常,这是因为递归函数没有正确的终止条件,所以它会永远调用自己。或者,当终止条件很好时,可能是因为在执行之前需要太多递归调用

但是,通过GUI编程,可以生成间接递归。例如,您的应用程序可能正在处理绘制消息,并且在处理这些消息时,它可能会调用导致系统发送另一条绘制消息的函数。这里您没有显式地调用自己,但OS/VM已经为您完成了调用

要处理它们,您需要检查代码。如果你有自己调用的函数,那么检查你是否有终止条件。如果有,则检查调用函数时是否至少修改了一个参数,否则递归调用的函数将没有可见的更改,终止条件也将无效。还要注意,在达到有效终止条件之前,堆栈空间可能会耗尽内存,因此请确保方法能够处理需要更多递归调用的输入值

如果没有明显的递归函数,请检查是否调用了间接地将导致调用函数的库函数(如上面的隐式情况)

发表评论