gpt4 book ai didi

java - 发生不可恢复的堆栈溢出

转载 作者:行者123 更新时间:2023-12-03 20:26:16 24 4
gpt4 key购买 nike

我正在尝试集成 Java 和 C 函数,但遇到了一些麻烦。我试图以这种方式初始化一个变量 char DataString[32][900];而且我不断收到“发生不可恢复的堆栈溢出”。如果我删除它,程序就不会再崩溃了。您知道是什么原因造成的吗?

最佳答案

听上去,您(实际上)在 Java 线程的堆栈上分配了一个大数组(同时调用 C 方法),这会导致堆栈溢出。这将是“不可恢复的”,因为超出堆栈末尾的写入可能会破坏内存中接下来出现的任何内容1。面对潜在的内存损坏,JVM 别无选择,只能摆脱困境。

如果这个诊断是正确的,那么解决方案就是不要在 C 代码的堆栈上分配大数据结构!使用 malloc 分配它们相反......并且不要忘记free否则您将需要追踪 native 代码内存泄漏。

或者,您可以尝试使用更大的 Java 线程堆栈:

  • -Xss<size>选项更改默认堆栈大小。这可能会影响所有线程。
  • Thread 的一些重载构造函数有一个用于覆盖默认堆栈大小的参数。

1 - 相反,如果纯 Java 方法导致堆栈溢出,总是在代码有机会破坏其他堆栈或数据结构之前检测到。因此,JVM 抛出 StackOverflowError 是安全的。并给应用程序尝试恢复的机会。

关于java - 发生不可恢复的堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8357197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com