Если вы получаете эту ошибку для видео YouTube, вместо того, чтобы использовать полный URL-адрес, используйте URL-адрес встраивания из параметров совместного доступа. Он будет выглядеть как http://www.youtube.com/embed/eCfDxZxTBW4
Вы также можете заменить watch?v=
на embed/
, поэтому http://www.youtube.com/watch?v=eCfDxZxTBW4
станет http://www.youtube.com/embed/eCfDxZxTBW4
Я верю, если Вы, которых setenv MALLOC_CHECK_
к 2, glibc позвонит abort()
, когда он обнаружит "свободный (): недопустимый указатель" ошибка. Отметьте запаздывающее подчеркивание от имени переменной среды.
, Если MALLOC_CHECK_
1 glibc, распечатает "свободный (): недопустимый указатель" (и подобный printfs для других ошибок). Если MALLOC_CHECK_
будет 0, то glibc тихо проигнорирует такие ошибки и просто возвратится. Если MALLOC_CHECK_
будут 3 glibc, то будет печатать сообщение и затем звонить abort()
. Т.е. это - битовая маска.
можно также звонить mallopt(M_CHECK_ACTION, arg)
с аргументом 0-3 и получить тот же результат как с MALLOC_CHECK_
.
, Так как Вы видите "свободный (): недопустимый указатель" сообщение, я думаю, что необходимо уже быть установкой MALLOC_CHECK_
или вызовом mallopt()
. По умолчанию glibc не печатает те сообщения.
Что касается того, как отладить, это, устанавливая обработчик для [1 110] является, вероятно, лучший способ продолжиться. Можно установить точку останова в обработчике или сознательно инициировать дамп ядра.
Я рекомендую получить valgrind:
valgrind - tool=memcheck - leak-check=full./a.out
В целом похоже, что Вам, возможно, придется перекомпилировать glibc, тьфу.
Вы не говорите, на какой среде Вы работаете, но если можно перекомпилировать код для OS X, тогда его версия libc имеет свободное (), который слушает эту переменную среды:
MallocErrorAbort If set, causes abort(3) to be called if an
error was encountered in malloc(3) or
free(3) , such as a calling free(3) on a
pointer previously freed.
страница справочника бесплатно () на OS X имеет больше информации.
, Если Вы находитесь на Linux, затем попробуйте Valgrind, он может найти некоторые невозможные к поиску ошибки.
, Как установить точку останова в gdb?
(gdb) b filename:linenumber//, например, b основное cpp:100
там способ вызвать аварийное прекращение работы? Я вспоминаю там быть огибающим var управлять этим?
у меня создалось впечатление, что это прервалось по умолчанию. Удостоверьтесь, что Вам установили отладочную версию.
Или использование libdmalloc5: "Понижение замены для системы malloc',
перевыделение', calloc',
свободные' и другие стандартные программы управления памятью при обеспечении мощных средств отладки, настраивающихся во времени выполнения. Эти средства включают такие вещи как отслеживание утечки памяти, обнаружение записи столба забора, создание отчетов файла/номера строки и общее журналирование статистики".
Добавляют, что это к Вашей команде
-L/usr/lib/debug/lib -ldmallocth
ссылки gdb должно автоматически возвратить управление, когда glibc инициировал аварийное прекращение работы.
Или можно настроить обработчик сигналов для SIGABRT для дампа stacktrace к fd (дескриптор файла). Ниже, mp_logfile является ФАЙЛ*
void *array[512 / sizeof(void *)]; // 100 is just an arbitrary number of backtraces, increase if you want.
size_t size;
size = backtrace (array, 512 / sizeof(void *));
backtrace_symbols_fd (array, size, fileno(mp_logfile));