170 похожих чатов

Я тут наткнулся на очень странную ошибку есть в кратце то,

есть вектор умных указателей на класс А
_result = vector<shared_ptr<A>>;
нужно удалить все классы из ветора по по условию(ограничен с++14), делал так:

for (auto iter = _result.begin(); iter != _result.end(); ) {
auto pointer = *iter;
auto a = *pointer;
if (a.getValue() == value) {
iter = _result.erase(iter);
} else {
iter++;
}
}

получил сегфолт
типа не гоже вызывать 2 раза подряд на один и тот же класс А деструктор

перестало падать когда написал так:
for (auto iter = _result.begin(); iter != _result.end(); ) {
if ((**iter).getValue() == value) {
iter = _result.erase(iter);
} else {
iter++;
}
}

почему так ?

7 ответов

15 просмотров

У вас там класс копируется и копия разрушается. Наверное у вас там деструктор криво написан

Слава
У вас там класс копируется и копия разрушается. На...

в деструкторе сделал printf и увидел что два раза вызывается

Andrey Morozov
в деструкторе сделал printf и увидел что два раза ...

На одном и том же объекте? Или на разных?

на одном и том же

Andrey Morozov
на одном и том же

это ты по адресу this проверил?

Mikail Bagishov
это ты по адресу this проверил?

нет, сейчас перепроверил на this - разные, походу начинаю понимать вчем проблема

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта