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

Здравствуйте! Подскажите, пожалуйста: 1. Вот такой код сегфолтится: SomeClass *pointer = new

SomeClass(..xx..); //just initialization

while (...) {
if(pointer) delete pointer;
pointer = new SomeClass(..yy..);
...
}
delete pointer;

2. А вот такой код:

SomeClass *pointer = new SomeClass(..x....); // just initialization

while(...) {
SomeClass *pointer = new SomeClass(..y....);
}
delete pointer;

Работает и даже память не течет. Вопрос почему это так?

40 ответов

19 просмотров

у меня такой код не сегфолтится int *pointer = new int(1); //just initialization if(pointer) delete pointer; pointer = new int(1); delete pointer;

Весь код можно увидеть из 1 пункта?

Roy Mustang
Весь код можно увидеть из 1 пункта?

А, ты уже смотришь, расскажи потом тогда

Wouf- Автор вопроса
Roy Mustang
Весь код можно увидеть из 1 пункта?

HepMC::GenVertex *sub_vertices = new HepMC::GenVertex(HepMC::FourVector(0, 0, 0, 0), 0); // just initialization while (ihy < hj2->GetNtot()) { if ((hj2->GetiJet().at(ihy)) != isub_l) { if(sub_vertices) delete sub_vertice; sub_vertices = new HepMC::GenVertex(HepMC::FourVector(0, 0, 0, 0), hj2->GetiJet().at(ihy)); Да, возможно вопрос сложнее, чем я думал. Или нужен прямо совсем весь код?

Wouf
HepMC::GenVertex *sub_vertices = new HepMC::GenVe...

Скинь на pastebin код (функцию) и ссылку скинь или ты можешь сам в отладчике пошагово пройтись и посмотреть выполняются ли ветки как задуманно, а вообще, используй unique_ptr если не хочешь утечек памяти

Wouf- Автор вопроса
Roy Mustang
Скинь на pastebin код (функцию) и ссылку скинь или...

Код есть на GitHub, но он огромен. Наверное мой вариант через unique_ptr, спасибо за совет!

Кто ж знает-то? можно определённо сказать одно: Один кусок кода более правильный , другой -неправильный.

Wouf- Автор вопроса
Ilya Zviagin
Кто ж знает-то? можно определённо сказать одно: Од...

И какой не правильный? Если 2., то почему компилятор и llvm-analyzer не ругаются?

Ты прислал два отрывка кода. Даже не так - два обрывка кода. Ты реально думаешь, что возможно оценить их правильность?

Wouf
И какой не правильный? Если 2., то почему компилят...

Попробуй скормить этим два куска твоим анализаторам, что они скажут?

Wouf
И какой не правильный? Если 2., то почему компилят...

Для таких ситуаций существуют отладчики. Если не умеете ими пользоваться - научитесь: однозначно пригодится.

Wouf- Автор вопроса
Ilya Zviagin
Попробуй скормить этим два куска твоим анализатора...

А ничего, не ругаются в том смысле, что память не течет

Wouf
А ничего, не ругаются в том смысле, что память не ...

Я не про это. А про то, что такой обрывок, ещё и с удалёнными частями, невозможно анализировать.

Wouf- Автор вопроса
Ilya Zviagin
Я не про это. А про то, что такой обрывок, ещё и с...

Да, я понял, спасибо. Буду с поведением фреймворка разбираться.

while(...) { SomeClass *pointer = new SomeClass(..y....); } delete pointer; // вот этот pointer — это другой pointer, другая переменная с тем же именем, нежели переменная в цикле. Она ни в коем случае не удалит ничего, на что ссылается переменная с именем pointer в цикле. Это ожидаемое тобой поведение ? Ты на это рассчитывал?

Wouf- Автор вопроса
Ilya Zviagin
while(...) { SomeClass *pointer = new SomeCl...

В этом и был вопрос: почему компилятор не ругаться на редекларацию, и почему llvm-analyzer не видит утечки памяти тут

Wouf- Автор вопроса
Ilya Zviagin
который фреймворк кстати?

Внутренний корпоративный

Wouf
В этом и был вопрос: почему компилятор не ругаться...

Я не могу оценить есть ли там утечка памяти

Wouf
В этом и был вопрос: почему компилятор не ругаться...

А ты если утечки ищешь, то использовал бы тут unique_ptr, и всё бы автоматом освобождалось.

Wouf- Автор вопроса
Wouf- Автор вопроса
Ilya Zviagin
А ты если утечки ищешь, то использовал бы тут uniq...

Собственно пора уже привыкать жить без new/delete

Wouf
Собственно пора уже привыкать жить без new/delete

Ну, по тому коду что ты показал, там вообще не надо было бы создавать объекты динамически...

Wouf- Автор вопроса
Ilya Zviagin
Ну, по тому коду что ты показал, там вообще не над...

Почему? Конструктор запускается с разными вводными... Вне цикла инициализация по-умолчанию, в цикле - условная

Wouf
Почему? Конструктор запускается с разными вводными...

Потому что ты объект тут же удаляешь. Это значит, что время жизни обьекта строго определено.

Wouf- Автор вопроса
Ilya Zviagin
Потому что ты объект тут же удаляешь. Это значит,...

Там ещё условие, т. ч. объект может жить несколько циклов

Wouf
Собственно пора уже привыкать жить без new/delete

Да с ними уже лет 20 в C++ никто и не живет, кроме тех случаев, когда фреймворк (например, Qt) не берет на себя GC

Wouf- Автор вопроса
Anatoly Shirokov
Да с ними уже лет 20 в C++ никто и не живет, кроме...

Старые коды переписываются медленно... Да и auto_ptr работало не очень (при копировании)

Wouf
Старые коды переписываются медленно... Да и auto_p...

Не то чтобы не очень, оно работало по стандарту и было не Copyable

Wouf
Старые коды переписываются медленно... Да и auto_p...

Ты лучше расскажи, когда тебя заморозили? Разморозка недавно была, это понятно.

Wouf- Автор вопроса
Anatoly Shirokov
Не то чтобы не очень, оно работало по стандарту и ...

Вот поэтому в больших и сложных проектах особого желания отказываться от new/delete не было

Wouf
Вот поэтому в больших и сложных проектах особого ж...

Повторю, что использовать неуправляемые raw указатели в C++ - это говорит о качестве "большого проекта"

Wouf
Вот поэтому в больших и сложных проектах особого ж...

Нестандартных и своих смарт указателей было выше крыши

Anatoly Shirokov
Повторю, что использовать неуправляемые raw указат...

Ну хрен знает, всякие графы, двух связанные списки без raw не реализуешь

Anatoly Shirokov
Повторю, что использовать неуправляемые raw указат...

Использовать raw указатели или владеющие raw указатели?)

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Карта сайта