При обнаружении ошибки «*** glibc обнаружен *** free (): неверный следующий размер (быстрый)»

Пожалуйста, смотрите вопрос MSOДлинный список возможных дубликатов - выделение памяти C и превышение границ для получения информации о тесно связанных вопросах.

Среда разработки: CentOS 4.7, Kdevelop 3.1.1, gcc 3.4.6

Я запускаю тестовый клиент Java, который загружает разделяемую библиотеку C ++ с использованием JNI. В моем приложении три компонента:

Java-клиентC ++ разделяемая библиотека, которая действует как оболочка JNI. (Я назову это "библиотека-обертка")Совместная библиотека C ++, содержащая бизнес-объекты. (Я назову это "businesslibrary")

Когда я запускаю клиент, я очень часто сталкиваюсь с ошибкой:*** glibc detected *** free(): invalid next size (fast): 0x080eeef8 ***, Эта ошибка появляется примерно 10 - 11 раз, а затем приложение запускается.

В моем Java-клиенте я сначала загружаю необходимые библиотеки C ++ в статический ctor следующим образом:

static
{
System.Load("/root/Desktop/libs/businesslibrary");
System.out.println("business library loaded");
System.Load("/root/Desktop/libs/wrapperlibrary");
System.out.println("wrapper library loaded");
}

Выражение «загруженная бизнес-библиотека» печатается на консоли, но после этого появляется ошибка*** glibc... приходит.

В настройках проекта библиотеки-оболочки бизнес-библиотека указывается как зависимая библиотека. Так что, даже если я опущу вызов, чтобы загрузить businesslibrary и просто написать,

static
{
System.Load("/root/Desktop/libs/wrapperlibrary");
System.out.println("wrapper library loaded");
}

затем сначала загружается бизнес-библиотека (это видно по журналу создания глобальной переменной), а затем загружается библиотека-обертка. Элемент управления возвращается обратно к клиенту java, и на консоли выводится оператор «библиотека загружена». После этого происходит вызов нативного метода. Но элемент управления никогда не достигает реализации этого нативного метода. Скорее до этого ошибка*** glibc... снова приходит. Также, если я вставлю вызов статического метода другого Java-класса перед вызовом нативного метода, такого как,

static
{
 System.Load("/root/Desktop/libs/wrapperlibrary");
 System.out.println("wrapper library loaded");
 System.out.println(Try.temp()); //where temp is a static method of Try class which returns a string.

 native method call;

 --
 --
}

тогда вывод Try.temp () никогда не печатается.

Каковы могут быть возможные причины проблемы в обоих этих подходах и как мне действовать дальше?

Ответы на вопрос(2)

Ваш ответ на вопрос