Amr*_*rka 6 c# visual-studio-2012
我有一个C#WinForm应用程序,我运行x86模式.它适用于x86模式.当我使用任何CPU模式运行此应用程序时,会出现此问题.我得到以下提到的错误:
XXXXXX.dll中出现未处理的"System.StackOverflowException"类型异常
我知道这可能是由无限循环引起的,但在这种情况下,x86模式中应该发生相同的错误.我知道这不是因为无限次迭代.它与堆栈溢出有关.
做了一些研究后,我用Editbin增加了堆栈大小
从
Editbin.exe/Stack:14000000"$(TargetDir)MyProject.exe"
至
Editbin.exe/Stack:14000000"$(TargetDir)MyProject.exe"
任何想法可能是什么原因以及我应该进入的方向?
Eri*_*ert 37
我的浴缸满溢了.
尝试更大的浴缸.
好的,我做到了.我的浴缸还在满溢.
尝试更大的浴缸.
好吧,它还在溢出!我有一个巨大的浴缸,但它仍然溢出!
如果问题是排水管堵塞并且水龙头打开,那么更大的浴缸也无济于事.
您的问题可能是您的程序试图消耗无限量的堆栈.使堆栈更大也无济于事.
我知道这可能是因为无限循环而且在这种情况下x86模式中应该发生同样的错误.
这句话是错误的.不要求发生相同的错误.
根据我是否针对特定的cpu,它为什么会有所不同?
抖动可以在不同的场景中生成不同的代码,有时可以生成将无限递归转换为无限循环的代码.那些不会消耗无限堆栈,但它们将永远运行.
假设为了论证,没有无限递归.
然后可能存在非常大的递归.由于64位代码可以比等效的32位代码增加更多的堆栈空间,因此大的递归可能导致更早的堆栈外错误.
在这种情况下,使堆栈更大是一个坏主意.相反,找到深度递归算法并使其成为迭代算法.
原因是无限递归.附加调试器并在发生异常时查看堆栈跟踪.
归档时间: |
|
查看次数: |
1608 次 |
最近记录: |