Я получаю следующую ошибку во время выполнения. Что это значит и как мне его отладить?

*** glibc detected *** ./main: corrupted double-linked list: 0x086c4f30 ***

После этого программа не выходит, и я вынужден выйти, используя cntrl + C. Я не использую никакого выделения памяти, например «удалить», во всем моем коде.

При использовании Valgrind я получаю следующее сообщение:

Invalid write of size 4
==20358==    at 0x8049932: main (main.cpp:123)
==20358==  Address 0x432e6f8 is 0 bytes after a block of size 16 alloc'd
==20358==    at 0x402C454: operator new[](unsigned int) (in        /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==20358==    by 0x8049907: main (main.cpp:120)

И соответствующий кусок кода в строке 123

float **der_global= new float *[NODES];
for(int i=0; i<no_element; i++)
{
der_global[i]=new float [no_element];
}

-1

Решение

Ваш оригинальный новый вызов дает вам место для хранения указателей NODES; но ваш цикл for пытается установить для них no_element, который не обязательно должен быть одинаковым. Ваш цикл for должен иметь i меньше, чем NODES, а не i меньше, чем no_element.

0

Другие решения

Эта ошибка обычно появляется, когда программа освобождает память, которая больше не действительна.
Используете ли вы malloc или любое другое динамическое размещение.

Было бы легко решить вашу проблему, если бы вы могли добавить часть своего кода

Попробуйте использовать valgrind

valgrind --tool=memcheck --leak-check=full --track-origins=yes --show-reachable=yes --log-file=val.log ./<executable> <parameters>

и посмотрите на val.log

Вы также можете использовать GDB, но для этого вам нужно будет скомпилировать с тегом -g

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector