*** 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];
}
Ваш оригинальный новый вызов дает вам место для хранения указателей NODES; но ваш цикл for пытается установить для них no_element, который не обязательно должен быть одинаковым. Ваш цикл for должен иметь i меньше, чем NODES, а не i меньше, чем no_element.
Эта ошибка обычно появляется, когда программа освобождает память, которая больше не действительна.
Используете ли вы malloc или любое другое динамическое размещение.
Было бы легко решить вашу проблему, если бы вы могли добавить часть своего кода
Попробуйте использовать valgrind
valgrind --tool=memcheck --leak-check=full --track-origins=yes --show-reachable=yes --log-file=val.log ./<executable> <parameters>
и посмотрите на val.log
Вы также можете использовать GDB, но для этого вам нужно будет скомпилировать с тегом -g