我正在尝试集成Java和C函数,我遇到了一些麻烦。 我试图用这种方式初始化一个变量char DataString [32] [900];并且我继续得到“发生了不可恢复的堆栈溢出。” 如果我删除它,程序不会再崩溃。 你有什么想法导致它吗?
答案 0 :(得分:7)
通过它的声音,你(实际上)在Java线程的堆栈上分配一个大数组(同时调用C方法),这导致堆栈溢出。我想这是在JNI调用返回时检测到的。无论如何,它将是“不可恢复的”,因为超出堆栈末尾的写入可能会踩踏内存中出现的任何内容。面对潜在的内存损坏,JVM别无选择,只能纾困。
如果这个诊断是正确的,那么解决方案是不在堆栈上分配大数据结构!使用malloc
代替它们......并且不要让它们释放它们,否则你将有一个本机代码内存泄漏来追踪。
您是否考虑过用Java重写C代码?它可能会避免很多痛苦。