Size: a a a

2020 June 03

АК

Александр Караев... in pro.cxx
Утечку можно даже через вектор получить, что уж
источник

IS

Iskander Saitbatalov in pro.cxx
@kitnerboyredoubt черкани сюда после того, как разберешься со своей проблемой, пожалуйста.
источник

m

magras in pro.cxx
Александр Караев
Утечку можно даже через вектор получить, что уж
Через вектор это big_vector.resize(0); assert(big_vector.capacity() == 0)?
источник

АК

Александр Караев... in pro.cxx
magras
Через вектор это big_vector.resize(0); assert(big_vector.capacity() == 0)?
Это не утечка =)
источник

CD

Constantine Drozdov in pro.cxx
Iskander Saitbatalov
Да ,ты прав. Ну у меня цель была показать, что проблему с памятью можно получить на любых смарт поинтерах. Если хочется лик, то можно вообще одним поинтером обойтись)
#include <memory>

struct guard {
 std::unique_ptr<guard> & guarded;
 guard(std::unique_ptr<guard> & guarded) : guarded(guarded) {}
 ~guard() { guarded = nullptr; }
};

struct test_ok {
 std::unique_ptr<guard> pointer;
 test_ok() { pointer = std::make_unique<guard>(pointer); }
 ~test_ok() { pointer.reset(); } //this will be ok
};

struct test_failed {
 std::unique_ptr<guard> pointer;
 test_failed() { pointer = std::make_unique<guard>(pointer); }
};

int main() {
 test_failed{}; //heap corruption
}
источник

CD

Constantine Drozdov in pro.cxx
я, правда, не помню, запускал или нет
источник

АК

Александр Караев... in pro.cxx
magras
Через вектор это big_vector.resize(0); assert(big_vector.capacity() == 0)?
Тут вектор честно освободит всё по окончании своего времени жизни
источник

m

magras in pro.cxx
Александр Караев
Это не утечка =)
Это зависит от ситуации. Для сервера это вполне может проблемой, хотя формально действительно не является утечкой.

А как тогда на векторе получить утечку? Если не шаманить с аллокаторами, я не соображу как этого можно добиться.
источник

CD

Constantine Drozdov in pro.cxx
magras
Это зависит от ситуации. Для сервера это вполне может проблемой, хотя формально действительно не является утечкой.

А как тогда на векторе получить утечку? Если не шаманить с аллокаторами, я не соображу как этого можно добиться.
Если это (неявная) утечка, то она вызвана совершенно не вектором, а тем, кто его хранит
источник

K

Kitnerboy Redoubt in pro.cxx
Stas Koynov
аналогично, только у меня еще и номер строки дал, если -g добавить. Топикстартер, у тебя какой gcc?
На ПК 4.8.5
У кросс-компилятора  5.2.0
источник

K

Kitnerboy Redoubt in pro.cxx
Сорян, я обедать ушёл - с утра сижу без продыху бьюсь.
источник

SK

Stas Koynov in pro.cxx
Kitnerboy Redoubt
На ПК 4.8.5
У кросс-компилятора  5.2.0
пора бы обновиться!
источник

N

Neargye in pro.cxx
magras
Это зависит от ситуации. Для сервера это вполне может проблемой, хотя формально действительно не является утечкой.

А как тогда на векторе получить утечку? Если не шаманить с аллокаторами, я не соображу как этого можно добиться.
vector v;
v.push_back(v.front());
источник

m

magras in pro.cxx
Neargye
vector v;
v.push_back(v.front());
Я не вижу проблем с этим кодом.
источник

K

Kitnerboy Redoubt in pro.cxx
Stas Koynov
пора бы обновиться!
Согласен.
Но комп рабочий, мне сейчас важнее, чтобы не пришлось патчи лепить на тулчейн.
источник

N

Neargye in pro.cxx
magras
Я не вижу проблем с этим кодом.
источник

m

magras in pro.cxx
magras
Я не вижу проблем с этим кодом.
Наверное, я не прав и здесь может возникнуть UB. Но это не утечка.
источник

N

Neargye in pro.cxx
magras
Наверное, я не прав и здесь может возникнуть UB. Но это не утечка.
источник

АК

Александр Караев... in pro.cxx
не, в v.push_back(v.front()) проблемы нет, как заметил комментатор - std позаботился об этом
источник

АК

Александр Караев... in pro.cxx
а вот именно этот пример я искал и не мог найти, спасибо =)
@drMagras
источник