Что-то я запамятовал. Если я вызываю delete для указателя на базовый класс без виртуального деструктора это UB? И что фактически должно случиться кроме утечки памяти и потери логики деструктора производного класса? А то я тут ищу double free в кишка std;;string и уже не знаю на что грешить.
@mugiseyebrows можешь тоже вот поразвлекаться.
[06:30]<lexszero> есть кусок говнокода, ебущийся в смесь std::string и сишных строк. когда в нем кидается эксепшон, наступает какая-то жопа, glibc говорит что double free и грязно падает. какого хуя?
https://github.com/contactless/wb-homa-drivers/blob/master/wb-homa-adc/sysfs_adc.cpp#L104
[12:08]<lexszero> эта хуйня вызывается для каждого канала прописанного в конфиге.
если в конфиге только один канал, с которым должен кидаться экзепшон - он нормально кидается и ловится.
если перед ним прописан другой канал на котором экзепшон не кидается - получаем double free.
@anonymous root@wirenboard:~# ./wb-homa-adc -d -c ./wb-homa-adc.conf
*** glibc detected *** ./wb-homa-adc: double free or corruption (fasttop): 0x01a469d8 ***
Aborted
root@wirenboard:~# valgrind ./wb-homa-adc -d -c ./wb-homa-adc.conf
Illegal instruction
spasibo!
@lexszero там libcrypt юзается который SIGILL'ами проверяет поддерживаемые процом фичи.