*** glibc detected *** double free or corruption (out): *** - выдает glibc. Она выполняет дополнительные внутренние проверки целостности, с целью предотвращения и скорейшего выявления разрушения данных. По умолчанию, в случае выявления ошибки, в стандартное устройство stderr выводится подобное сообщение (или, если stderr не открыто, регистрируется через syslog)
По умолчанию, вызвавшая эту ошибку программа уничтожается; однако это (а также формирование сообщений) можно контролировать с помощью переменной окружения MALLOC_CHECK_. Поддерживаются следующие параметры:
0 - выдавать сообщение об ошибке и не уничтожать программу
1 - Выдавать сообщение об ошибке, но не уничтожать программу
2 - Не выдавать сообщение об ошибке, но уничтожать программу
3 - Выдавать сообщение об ошибке и уничтожать программу
Замечание:
Если переменной MALLOC_CHECK_ явно присвоено значение, отличное от 0, glibc будет выполнять больше расширенных проверок, что может отрицательно сказаться на производительности.
У меня это было, когда проверялся ничем не инициализированный char* и потом вызывался free() от него:
char* c;
...
if (c != NULL) free(c);
c может не быть NULL и тогда будет пытаться освобождаться не выделенная память, что и вызывает ошибку.
По умолчанию, вызвавшая эту ошибку программа уничтожается; однако это (а также формирование сообщений) можно контролировать с помощью переменной окружения MALLOC_CHECK_. Поддерживаются следующие параметры:
0 - выдавать сообщение об ошибке и не уничтожать программу
1 - Выдавать сообщение об ошибке, но не уничтожать программу
2 - Не выдавать сообщение об ошибке, но уничтожать программу
3 - Выдавать сообщение об ошибке и уничтожать программу
Замечание:
Если переменной MALLOC_CHECK_ явно присвоено значение, отличное от 0, glibc будет выполнять больше расширенных проверок, что может отрицательно сказаться на производительности.
У меня это было, когда проверялся ничем не инициализированный char* и потом вызывался free() от него:
char* c;
...
if (c != NULL) free(c);
c может не быть NULL и тогда будет пытаться освобождаться не выделенная память, что и вызывает ошибку.
Комментариев нет:
Отправить комментарий