Повреждение памяти и сбой памяти memwatch

Когда я использовал memwatch с моей программой, я вылетал, как показано ниже:

* Ошибка в `./xxx': двойное освобождение или повреждение (нет): 0x0a015650 *...

Потому что это коммерческая программа. Я не могу показать свои коды. Но, есть ли у них какие-либо известные проблемы, связанные с повреждением памяти в memwatch? Я использую stdup() для создания строковой памяти и освобождаю ее сразу после ее использования. Так что двойного освобождения нет, заверил я

Также, когда я использовал valgrind, он показывает ту же ошибку

== 20929 == Недействительно free() / delete / delete[] / realloc()
==20929== в 0x402AC38: бесплатно (в /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
....
==20929== Адрес 0xb3b5948 занимает 40 байтов внутри блока размером 54
== 20929 == в 0x40299D8: malloc (в /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==20929== по 0x8060F40: mwMalloc (memwatch.c:893)
==20929== по 0x80614AC: mwStrdup (memwatch.c:1045)
...

Одна из утомленных вещей заключается в том, что, если я не использовал memwatch, valgrind не показывал никаких ошибок, также нет сбоев. Так что я подозреваю, что есть какая-то известная проблема в оболочке melowatch malloc или free.

* Обновлено 2014 г. 3. 3 *

Я нашел ответ:-). Потому что я вообще не собирал библиотеки, используемые в моем приложении. Только приложение было создано с использованием memwatch.c и memwatch.h. Поэтому проблема в том, что память (mwMalloc) была создана в коде моего приложения и освобождена библиотекой. Так что, на мой взгляд, у memwatch есть этот недостаток, потому что все библиотеки должны быть собраны с поддержкой memwatch снова. Но это почти невозможно. Я думаю, что для скорости mtrace (встроенный glibc) будет лучше, или valgrind может быть использован в некоторых случаях.

1 ответ

Вы отправляете free() правильный указатель, возвращаемый функцией malloc или вашим вызовом strdup? Попробуйте напечатать адреса, используя "printf("%p\n", yourVar);" после создания вашей строки, то прямо перед отправкой на бесплатное. Есть ли различия?

Другие вопросы по тегам