Произошло неустранимое переполнение стека - PullRequest
1 голос
/ 02 декабря 2011

Я пытаюсь интегрировать функции Java и C, и у меня возникли некоторые проблемы.Я пытаюсь инициализировать переменную таким образом char DataString [32] [900];и я продолжаю получать: «Произошло неустранимое переполнение стека».Если я удаляю его, программа больше не падает.У вас есть идеи, что вызывает это?

1 Ответ

7 голосов
/ 02 декабря 2011

Судя по звукам, вы (фактически) выделяете большой массив в стеке потока Java (при вызове метода C), и это вызывает переполнение стека.Я полагаю, что это обнаруживается, когда возвращается вызов JNI.В любом случае, это было бы «невосстановимо», потому что запись за пределы стека могла бы растоптать все, что появляется в памяти дальше.Перед лицом возможного повреждения памяти у JVM нет другого выбора, кроме как выручить.

Если этот диагноз верен, то решение состоит в том, чтобы не размещать большие структуры данных в стеке!Выделите их, используя malloc вместо этого ... и не для того, чтобы освободить их, иначе у вас будет утечка памяти собственного кода для отслеживания.


Рассматривали ли вы переписывание кода C вДжава?Это потенциально позволит избежать большой боли.

...