вторник, 4 октября 2011 г.

*** glibc detected *** double free or corruption (out): ***

*** 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 и тогда будет пытаться освобождаться не выделенная память, что и вызывает ошибку.

Комментариев нет:

Отправить комментарий