Вы знаете, новый драйвер (по крайней мере, на Linux), который способен к этому, вероятно, не было бы это трудно для записи.
, С другой стороны, это было бы безумие для создания программ как это. Если у Вас нет некоторого действительно определенного и единственного использования для такой вещи, я не рекомендовал бы это. Если бы Вы создали крупное приложение, загруженное постоянными проверками достоверности указателя, то это, вероятно, было бы страшно медленно.
Скорее всего, в вашем коде есть несоответствие «освобождение / удаление», которое задерживает появление симптома до сих пор. Когда вы используете освобожденную память, операционная система может продолжать работу столько, сколько сочтет нужным.
Попробуйте запустить программу в valgrind. valgrind использует свой собственный malloc и free, поэтому он может предупреждать вас о неверных новостях и удаляет. Убедитесь, что компилируется без оптимизаций и с -g
1 :
g++ -g main.cc -o binary
valgrind --leak-check=full ./binary
Убедитесь, что вы не создали указатель из переменной стека, выходящей за пределы области видимости. Например, это распространенная ошибка среди новых разработчиков:
int *foo() {
int a = 0;
// do something to a here
return &a;
}
Поскольку a вышел за пределы области видимости, вы возвращаете указатель на освобожденную память.
1 О -g
, от страница руководства: Создание отладочной информации в собственном формате операционной системы (stabs, COFF, XCOFF, или DWARF 2). GDB может работать с этой отладочной информацией.