今天遇到了一个StackOverflowException问题,描述如下:
C++动态库定义了一个输出函数:int func(handle, void*, int);
C#调用 func(IntPtr, IntPtr, int),
结果总是报告StackOverflowException。
检查死循环,参数,,,无果。
只好把C++的函数直接return 0,过了,嗯这就好办了!
多次注释代码发现,在C++中为了省事,定义了一个
BYTE buf[1024*1024],这就导致StackOverflowException!
修改为 BYTE* buf = new BYTE[1024*1024],OK。
这个错误纠结了2个多小时,特此帖出来,希望对大家有帮助。
------解决思路----------------------
.NET 默认的栈大小只有1MB(windows上的默认值),一个BYTE buf[1024*1024] 就1MB了,那是肯定stack overflow。栈上分配是快,不过太大当然不行,原来那样写的话除非修改执行线程的栈大小,否则无论谁使用都会有问题。