Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 02.05.23 22:44
Оценка: -5 :))
Вроде же не сложно такое отследить:

#include <iostream>

class C1
{
public:
    const char* V1;
};

C1* fun2()
{
    char t[2];
    t[0] = 't';
    t[1] = 0;

    C1* c = new C1();
    c->V1 = t;

    return c;
}

int main()
{
    C1* t = fun2();
    std::cout << t->V1 << "\n";
}


Ну и сразу вопрос — каким плагином или чем вы находите подобные вещи?

З.Ы.

Вынужден пояснить.

Проблема здесь не сколько в забытом delete t а в присвоении стековой памяти c->V1 = t и использовании ее за пределами стека.
Отредактировано 03.05.2023 14:33 Shmj . Предыдущая версия . Еще …
Отредактировано 02.05.2023 22:56 Shmj . Предыдущая версия .
Отредактировано 02.05.2023 22:46 Shmj . Предыдущая версия .
Re[4]: Почему CLion и VS не предупреждают?
От: Кодт Россия  
Дата: 05.05.23 08:40
Оценка: +2 :))) :)
Здравствуйте, serg_joker, Вы писали:

_>Не ты выбираешь С++, С++ выбирает тебя.


Как понять, что С++ выбрал тебя? Он попытается тебя убить.
Перекуём баги на фичи!
Re[2]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 08:18
Оценка: :))) :)
Здравствуйте, rg45, Вы писали:

R>Плагин называется "увольнение по статье без выходного пособия".


Это было во времена вашей молодости. Сейчас не проблема уволить и найти чела под приятные языки — а где вы будете искать того, кто согласится на C++?
Re[10]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 04.05.23 12:24
Оценка: :))) :)
Здравствуйте, reversecode, Вы писали:

R>домохозяйственнве проекты где вы сами себе главный это не работа программистом С++


Ну пока такой вариант лучше чем просто зубрить по книгам, скажем так.

Тем более оценивает качество то все-равно реальный заказчик и все косяки все-равно выползут.

Я хотя и выпендриваюсь тут, но к работе отношусь ответственно — максимально все проверяю, стараюсь не допускать косяков. Прогоняю через PVS и внимательно изучаю каждый варнинг.

R>кто вас собеседовал по знаниям С++ прежде чем вам дал ту работку ? ой никто ? ну я так и знал


Да я вообще против этих собеседований. У меня подход другой — давай сразу работать и в работе мы друг-друга проверим — подходим или нет. Собеседование ничего не дает. Есть спецы по прохождению собеседований — а толку?

R>давайте вы откроете djinn,киевский вы наш и подадитесь на пару вакансий где вас прособеседуют хотя бы джуны ?


Не мой путь.
Re[18]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 04.05.23 17:20
Оценка: :))) :)
Здравствуйте, reversecode, Вы писали:

R>так что в данном случае я хейтер шмыги


Ничего страшного — у всех великих людей есть хейтеры. Я вам даже благодарен. Все это от неуверенности в себе.
Re[13]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 18:12
Оценка: 7 (1) +2
Здравствуйте, Shmj, Вы писали:

S>Утечку памяти воткнул случайно, т.к. еще не отработал привычку очистки. Потом увидел но решил не исправлять — т.к. хороший анализатор должен и это увидеть.


Так вот знай, за "привычку очистки" в приличных конторах бьют линейкой по рукам так же точно, как и за утечку, которую ты "воткнул случайно". А могут и прощальный подсрачник выписать. Я тебе в третий раз даю эту ссылку: RAII. Почитай, это найважнейший принцип, без которого не пишется ни одна современная программа на С++.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 18:17 rg45 . Предыдущая версия .
Re[8]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 14:04
Оценка: :)))
Здравствуйте, rg45, Вы писали:

R>Вот именно, использование new там было вообще не в тему — даже в контесте его вопроса. Это лишь линший раз демонстрирует в какую кучу свалены мухи и котлеты в его голове. И сам он эту кучу разгребать не хочет, а тащит ее нам, чтоб мы разбирались в лабиринтах его сложного Квалиа.


У меня как раз вопрос присваивания стековой памяти, которая освобождается при выходе из функции.

R>Полностью согласен. Я и сам проходил по маршруту C++ -> C#. И знаю многих людей, которые преодолели этот путь без особого труда и в кратчайшие сроки. А вот в обратную сторону... что-то ни одного не припоминаю. Сплошные стоны и сопли.


Я, дело в том что, вынужден "марать руки" в С++ — никуда от этого не деться. Хотя проект то не на С++ у нас. Просто внешние библиотеки нужно чуток править.

И понял что это все-равно кому-то нужно будет делать и никто не хочет — все боятся. И чем дальше — тем все меньше в живых и при памяти остается людей, кто может это делать.
Re[9]: Почему CLion и VS не предупреждают?
От: DiPaolo Россия  
Дата: 04.05.23 12:15
Оценка: +3
S>Для человека важна эмоциональная составляющая. Когда немного потроллил, облажался — уже лучше запомнишь.

это называется паразитированием или использованием других людей. Дополнительный аргумент в лично мою сформировавшуюся позицию больше тебе не помогать.
Патриот здравого смысла
Re[13]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 04.05.23 13:13
Оценка: +2 :)
Здравствуйте, Shmj, Вы писали:

R>>умение запускать компилятор С++ и корректировать код С++

R>>это не знания С++

S>Добавлять новый функционал, который работает на 3 разных типах ОС — норм?


Упомянутый здесь RussianFellow, полагаю, тоже не забесплатно работал. Он свой код здесь даже как-то засветил. Душераздирающее зрелище было.

Так что не показатель.
Re[3]: Почему CLion и VS не предупреждают?
От: PM  
Дата: 04.05.23 05:21
Оценка: 8 (2)
Здравствуйте, Shmj, Вы писали:

PM>>Запускаем CI c разными вариантами sanitizers которые встроены в GCC и Clang


S>Вот ради этого и стоило создать пост, пусть и подвергнувшись многочисленному высмеиванию. sanitizers, теперь буду знать что это существует.


В мире C++ много чего существует, и сеньоры на вашем проекте должны бы по-хорошему про это знать. Если самый опытный там — это вы, то есть куча вещей, которые придется изучить. Они уже собраны в списки типа "awesome c++", "modern c++ best practices"

Для проектов есть шаблоны, где уже подобраны средства для сборки, тестов, управления зависимостями, автоформатирования кода, статических анализаторов, санитайзеров, и прочих инструментов, используемых при разработке на C++

Вот например парочка таких:

https://github.com/cpp-best-practices/cmake_template
https://github.com/TheLartians/ModernCppStarter
Re: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 06:46
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Вроде же не сложно такое отследить:


S>
S>#include <iostream>

S>class C1
S>{
S>public:
S>    const char* V1;
S>};

S>C1* fun2()
S>{
S>    char t[2];
S>    t[0] = 't';
S>    t[1] = 0;

S>    C1* c = new C1();
    c->>V1 = t;

S>    return c;
S>}

S>int main()
S>{
S>    C1* t = fun2();
S>    std::cout << t->V1 << "\n";
S>}
S>


S>Ну и сразу вопрос — каким плагином или чем вы находите подобные вещи?


Плагин называется "увольнение по статье без выходного пособия".
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[3]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 03.05.23 08:54
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Это было во времена вашей молодости. Сейчас не проблема уволить и найти чела под приятные языки — а где вы будете искать того, кто согласится на C++?


Не ты выбираешь С++, С++ выбирает тебя.

Сэкономь себе время, а коллегам нервы. Иди сразу на "приятные языки".
Re[10]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 14:52
Оценка: :))
Здравствуйте, rg45, Вы писали:

S>>У меня как раз вопрос присваивания стековой памяти, которая освобождается при выходе из функции.


R>

Усыпить, чтоб не мучился


Давай по теме. Как я вижу, не все тут поняли где именно проблема.
Re[12]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 18:04
Оценка: :))
Здравствуйте, rg45, Вы писали:

S>>Я не призываю так писать — мой вопрос лишь в статистическом анализаторе, который такие вещи сможет обнаружить.


R>Какие "такие"? Ты нахера утечку памяти туда воткнул, когда твой вопрос касался указателей и ссылок на локальные переменные, чье время жизни меньше времени жизни ссылок и указателей?


Утечку памяти воткнул случайно, т.к. еще не отработал привычку очистки. Потом увидел но решил не исправлять — т.к. хороший анализатор должен и это увидеть.
Re[11]: Почему CLion и VS не предупреждают?
От: DiPaolo Россия  
Дата: 04.05.23 12:31
Оценка: +2
TB>Ты так говоришь будто тебе в напряг на форумах тусоваться.

Тусоваться — не в напряг. Помогать ответами — не в напряг. Но когда мало того, что задают глупые вопросы пачками, а потом говорят, то тебя используют — желание пропадает отвечать конкретно ему.

Похожая история с RussianFellow — я ему поначалу активно помогал, хотя многие над ним смеялись или не отвечали. И потом я понял, почему. Ну и тоже стал скипать его банальные вопросы.
Патриот здравого смысла
Re[12]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 04.05.23 12:33
Оценка: +2
Здравствуйте, DiPaolo, Вы писали:

DP>Тусоваться — не в напряг. Помогать ответами — не в напряг. Но когда мало того, что задают глупые вопросы пачками, а потом говорят, то тебя используют — желание пропадает отвечать конкретно ему.


Так мало того, у меня утвердилось мнение, что он вообще не читает то, что ему пишут. Ты перед ним распинаешься, а он КА-А-АК ляпнет потом... Сидишь и думаешь: "перед кем бисер метал?". Усваивает только наезды и оскорбления, похоже.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 04.05.2023 12:35 rg45 . Предыдущая версия .
Re[13]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 04.05.23 13:18
Оценка: +2
Здравствуйте, Shmj, Вы писали:

R>>в данном случае ваши знания 0


S>Чем вы докажите свою компетентность, чтобы делать такие заявления?


Ух ты, а ты дерзить умеешь, оказывается.

Видишь ли какое дело, не он ведь один тебе высказывает подобную мысль. Многие участники форума тебе уже высказали примерно то же самое. Форума, на который ты приходишь за помощью. Обращаясь к нам за помощью, ты сам же и признаешь нашу компетентность. Вот такая штука выходит.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[14]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 04.05.23 14:03
Оценка: +2
Здравствуйте, reversecode, Вы писали:

R>когда конкретный вопрос надо задать аут оф контекс(reply было не ему), надо же как то обратиться

R>увы приходиться переходить к собеседнику на "ты"
R>на "вы" в таких случаях как то слишком почетно

R>если бы репли было на его сообщение, было бы на "вы"


Да откуда вообще пошла эта шиза докапываться до "тыканья" в интернете? По-моему "ты" было нормой до того момента как изза распространения технологий в интернет набижали климактические тетки и жирные бизнесмены депутаты с губожопыми любовницами.
Re: Почему CLion и VS не предупреждают?
От: PM  
Дата: 03.05.23 21:43
Оценка: 7 (1)
Здравствуйте, Shmj, Вы писали:

S>Вроде же не сложно такое отследить:


...

S>Ну и сразу вопрос — каким плагином или чем вы находите подобные вещи?


Запускаем CI c разными вариантами sanitizers которые встроены в GCC и Clang (например https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html#index-fsanitize_003daddress и ниже). Для отслеживания проблем с памятью помогает Address Sanitizer.

На ваш код без утечки памяти https://godbolt.org/z/M7TK3nocx дает такое при выполнении

Program returned: 1
=================================================================
==1==ERROR: AddressSanitizer: stack-use-after-return on address 0x7f0475700030 at pc 0x7f04782992c1 bp 0x7fffe3dba460 sp 0x7fffe3db9c20
READ of size 2 at 0x7f0475700030 thread T0
#0 0x7f04782992c0 (/opt/compiler-explorer/gcc-13.1.0/lib64/libasan.so.8+0x692c0) (BuildId: c9b24be17e4cbd04bdb4891782c4425e47a9259a)
#1 0x7f047811176c in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (/opt/compiler-explorer/gcc-13.1.0/lib64/libstdc++.so.6+0x14576c) (BuildId: 60915ee46c169683f422e31f8caeb5d5edd58605)
#2 0x4013c4 in main /app/example.cpp:24
#3 0x7f0477c89082 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24082) (BuildId: 1878e6b475720c7c51969e69ab2d276fae6d1dee)
#4 0x4010fd in _start (/app/output.s+0x4010fd) (BuildId: 2e4b75a6aaf575ff14172ed6b9ca02728687318e)

Address 0x7f0475700030 is located in stack of thread T0 at offset 48 in frame
#0 0x4011c5 in fun2() /app/example.cpp:10

This frame has 2 object(s):
[48, 50) 't' (line 11) <== Memory access at offset 48 is inside this variable
[64, 72) 'c' (line 15)
...

Re[10]: Почему CLion и VS не предупреждают?
От: B0FEE664  
Дата: 04.05.23 11:16
Оценка: 4 (1)
Здравствуйте, T4r4sB, Вы писали:

TB>У тебя же в коде ещё и всякий мусор типа оператора new, кстати нахрена он нужен после 11 года?


с 14-ого года. std::make_unique — это C++14.
И каждый день — без права на ошибку...
Re[3]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 08:24
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Это было во времена вашей молодости. Сейчас не проблема уволить и найти чела под приятные языки — а где вы будете искать того, кто согласится на C++?


Изредка находятся, все-таки, прикинь! И, как правило, это такие люди, которым приятно работать именно на C++ со всей его сложностью и недостатками. А ты, как обычно, пытаешься натянуть свой больной прыщик на всю вселенную.

P.S. И, как бы то ни было, лучше вообще никого не нанимать, чем взять на работу профнепригодное убожество. От такого вот
Автор: Shmj
Дата: 03.05.23
точно не станет лучше никому.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 8:37 rg45 . Предыдущая версия . Еще …
Отредактировано 03.05.2023 8:28 rg45 . Предыдущая версия .
Отредактировано 03.05.2023 8:28 rg45 . Предыдущая версия .
Отредактировано 03.05.2023 8:26 rg45 . Предыдущая версия .
Re[5]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 09:17
Оценка: +1
Здравствуйте, so5team, Вы писали:

S>Хотя есть маркер, который наводит на мысль, что ТС так может и в продакшен пИсать


Причем, жирный такой маркер — круг вопросов, которые он поднимает, указывает на то, что он не вникал и не собирается. Я ему дважды уже пытался намекать, что пора бы познакомиться с RAII, но это его лишь раздражает: http://rsdn.org/forum/cpp/8515546.1
Автор: Shmj
Дата: 30.04.23
. Сладостные грёзы о "приятных языках", где можно какать находу, где за тобой все приберут и подотрут, мешают погружению в пучины противного C++.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 9:22 rg45 . Предыдущая версия .
Re[2]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 03.05.23 12:40
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, Shmj, Вы писали:


S>>Ну и сразу вопрос — каким плагином или чем вы находите подобные вещи?


BFE>Нативные массивы не должны использоваться.

BFE>Голые/сырые указатели не должны использоваться.
BFE>Тогда подобные вещи искать не придётся крайне редко.

Ну перепишешь ты этот код на std::array и ссылки. Лучше станет? Нет
Re[7]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 03.05.23 12:46
Оценка: +1
Здравствуйте, so5team, Вы писали:

S> char t[] = {'t', 0};


char t[] = "t";
Re[10]: Почему CLion и VS не предупреждают?
От: DiPaolo Россия  
Дата: 03.05.23 14:23
Оценка: +1
S>Вы хотите сказать в этом программа корректна? Она же мусор выводит на экран при сборке в VS, к примеру.

Я уже запутался. Ты смешал в кучу два или три разных топика. Изначально речь шла про ворсинки статического анализа. Я показал, какой ворнинг выдает clang-analyzer.

Далее твой вопрос про освобождение стековой памяти. На что я посоветовал почитать про стыковую память и память в куче, потому что налицо пробел в понимании работы памяти в плюсах.

Выше есть мои коменты в коде. Там вроде все понятно.
Патриот здравого смысла
Re[9]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 14:51
Оценка: +1
Здравствуйте, Shmj, Вы писали:

R>>Вот именно, использование new там было вообще не в тему — даже в контесте его вопроса. Это лишь линший раз демонстрирует в какую кучу свалены мухи и котлеты в его голове. И сам он эту кучу разгребать не хочет, а тащит ее нам, чтоб мы разбирались в лабиринтах его сложного Квалиа.


S>У меня как раз вопрос присваивания стековой памяти, которая освобождается при выходе из функции.


Усыпить, чтоб не мучился



Ты правда ни хера не понял в моих словах? Скажи, что ты просто прикидываешься, ну пожалуйста!
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 14:55 rg45 . Предыдущая версия .
Re[13]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 03.05.23 18:19
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Утечку памяти воткнул случайно, т.к. еще не отработал привычку очистки.


Нахрена ты вообще туда new впендюрил, если тебе достаточно вернуть объект по значению?
Re[14]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 18:54
Оценка: :)
Здравствуйте, T4r4sB, Вы писали:

S>>Утечку памяти воткнул случайно, т.к. еще не отработал привычку очистки.

TB>Нахрена ты вообще туда new впендюрил, если тебе достаточно вернуть объект по значению?

Задумка была — проиллюстрировать проблему присвоения стековой памяти и использовать его после удаления ее из стека.
Re[3]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 03.05.23 21:59
Оценка: +1
что такое санитайзер и что он на это может, знает каждый в топике, кроме вас
а с вас смеются потому что вы пиявка
паразитируете на других только бы самому не разбираться
у вас проблемы в само обучением и денег нет даже на ютуб репетитора-учителя ?

но вы не ответили на самый главный вопрос топика
>а что в С# настолько все плохо и нет работы, что шарписты набежали в тему С++ ?
Re[5]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 04.05.23 08:23
Оценка: +1
Здравствуйте, Shmj, Вы писали:

>>>а что в С# настолько все плохо и нет работы, что шарписты набежали в тему С++ ?


S>Я, пока был в горячей точке под бомбами, — начал думать о состоянии IT глобально. Все равно электричества не было и делать было нечего.

S> ...
S>Проанализировал все это и понял что от С++ все-равно никуда не уйти.

Ход мысли и вывод так себе, но это не так важно.
Важно то, что для вменяемого человека, пришедшего к такому выводу, следующим логичным шагом будет взять и почитать книги, а не браться за работу на С++ и заваливать форумы спамом.
Re[7]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 11:35
Оценка: +1
с вашими знаниями С++ вам никакие предложения не грозят
вы завалите все собеседования по С++, я вам гарантирую

хотите улучшать С++, ютуб видео курсы вас ждут
не хотите ютуб, ищите репетитора

само обучение через тролинг на форуме вам не поможет его изучить вообще никак
Re[8]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 04.05.23 11:59
Оценка: :)
Здравствуйте, reversecode, Вы писали:

R>с вашими знаниями С++ вам никакие предложения не грозят

R>вы завалите все собеседования по С++, я вам гарантирую

Я уже второй проект делаю на С++. Успешно — мотивация выше когда платят реальные деньги. Пусть и ниже рынка, но для обучения сойдет.

Так что ты там гарантировал?

R>хотите улучшать С++, ютуб видео курсы вас ждут

R>не хотите ютуб, ищите репетитора

Одно другому не мешает.

R>само обучение через тролинг на форуме вам не поможет его изучить вообще никак


Для человека важна эмоциональная составляющая. Когда немного потроллил, облажался — уже лучше запомнишь.

Запоминаетя то что связано с эмоциями. Сухие данные хороши только для вычислительной машины — она может за миллисекунду запомнить столько, что у человека уйдут десятки лет.
Re[12]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 04.05.23 13:25
Оценка: +1
Здравствуйте, reversecode, Вы писали:

Отсюда:
Автор: reversecode
Дата: 04.05.23

R>тыкать мне не надо, к частью мы не знакомы

А тут уже:
R>шмыга ты в бодишопе или на вольных хлебах ?

Это специальная поправка для пациента или вы познакомились?
"Коллега", конечно, всячески подталкивает к неуважительному к себе отношению, но так-то выглядит как двойные стандарты.
Re[10]: Почему CLion и VS не предупреждают?
От: K13 http://akvis.com
Дата: 07.05.23 11:22
Оценка: +1
TB>У тебя же в коде ещё и всякий мусор типа оператора new, кстати нахрена он нужен после 11 года?

А реализацию двунаправленного списка получится написать без new?
Без того чтобы все указатели сделать shared?
Другое дело, что необходимость в использовании именно new стала встречаться куда реже.
Re[12]: Почему CLion и VS не предупреждают?
От: K13 http://akvis.com
Дата: 07.05.23 11:38
Оценка: +1
R>на week_ptr вроде где то видел

Но это опять оверхед на ровном месте "лишь бы без new".
Нормально можно писать и дергая new напрямую, просто больше писанины и контроля, больше шансов выстрелить себе в ногу.
В некоторых случаях явный new оказывается самым простом способом обойтись без оверхеда (тот же двунаправленный список),
хотя требуется очень аккуратно проверять код.

Кстати, в Rust вроде бы используется концепция владения -- как там реализуют двунаправленый список? Кто кем владеет?
Re: Почему CLion и VS не предупреждают?
От: DiPaolo Россия  
Дата: 03.05.23 01:51
Оценка:
S>Ну и сразу вопрос — каким плагином или чем вы находите подобные вещи?

Qt Creator сразу дает предупреждение:

Potential leak of memory pointed to by 't' [clang-analyzer-cplusplus.NewDeleteLeaks]


Скорее всего, в CLion и VS можно как-то настроить. Как минимум, можно прикрутить стороннюю тулзу через настройки. Например, при сохранении файла прогонять статик аналайзером.

Что использовать:
— PVS
— cppcheck
— аналайзер clang

есть и другие

PS судя по документации, в вижуальнике это работает из коробки — https://learn.microsoft.com/en-us/cpp/code-quality/walkthrough-analyzing-c-cpp-code-for-defects?view=msvc-170. Может ты имел ввиду VS Code, и там этого нету
Патриот здравого смысла
Re: Почему CLion и VS не предупреждают?
От: B0FEE664  
Дата: 03.05.23 08:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну и сразу вопрос — каким плагином или чем вы находите подобные вещи?


Нативные массивы не должны использоваться.
Голые/сырые указатели не должны использоваться.
Тогда подобные вещи искать придётся крайне редко.
И каждый день — без права на ошибку...
Отредактировано 03.05.2023 15:58 B0FEE664 . Предыдущая версия .
Re[3]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 03.05.23 08:29
Оценка:
Здравствуйте, Shmj, Вы писали:

S>а где вы будете искать того, кто согласится на C++?


А что, кто-то ищет?
Re[3]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 08:45
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Это было во времена вашей молодости. Сейчас не проблема уволить и найти чела под приятные языки — а где вы будете искать того, кто согласится на C++?


Сущности "приятно" и "неприятно" относятся к категории субъективных ощущений и напрямую завязаны на твои навыки в той или иной области. Если ты не умеешь плавать и ездить на велосипеде, то приятными эти занятия тебе, конечно же, не будут казаться. Но абсолютизирование своих личных фобий на весь мир — это просто признак небольшого ума.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 8:50 rg45 . Предыдущая версия . Еще …
Отредактировано 03.05.2023 8:45 rg45 . Предыдущая версия .
Re[3]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 03.05.23 08:51
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Это было во времена вашей молодости. Сейчас не проблема уволить и найти чела под приятные языки — а где вы будете искать того, кто согласится на C++?


а что в С# настолько все плохо и нет работы, что шарписты набежали в тему С++ ?
Re[4]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 03.05.23 09:07
Оценка:
Здравствуйте, rg45, Вы писали:

R>От такого вот
Автор: Shmj
Дата: 03.05.23
точно не станет лучше никому.


Я все же надеюсь, что это просто максимально облегченный пример, сделанный так, чтобы максимально очевидно донести суть вопроса.

Хотя есть маркер, который наводит на мысль, что ТС так может и в продакшен пИсать
Re[6]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 03.05.23 09:48
Оценка:
Здравствуйте, rg45, Вы писали:

R>Причем, жирный такой маркер — круг вопросов, которые он поднимает


Вопросы-то ладно. Я сам когда в новую тему погружаюсь формулирую такие вопросы, от которых затем самому стыдно становится, когда какое-то понимание достигается.

Я про другое. ТС же вроде уже несколько месяцев как C++ мучает. Я так понимаю, что ему даже за это платят.
Но при этом он даже свой пример не может записать в таком виде, чтобы не возникало вопросов из категории "но что за фигня? можно же проще!"

Я бы от человека, который несколько месяцев изучает более-менее современный C++ ждал бы что-то вроде:
#include <iostream>

struct C1 {
    const char * V1;
};

C1 fun() {
    char t[] = {'t', 0};
    return { t };
}

int main() {
    C1 t = fun();
    std::cout << t.V1 << std::endl;
}

но не вот эту вот простыню из стартового сообщения.

R>Сладостные грёзы о "приятных языках", где можно какать находу, где за тобой все приберут и подотрут, мешают погружению в пучины противного C++.


Может это мое искаженное восприятие реальности, но по моим наблюдениям, если человек начинал учиться программировать на языках с GC и не прошел изначально через Си или C++ (или классический Паскаль, или даже Modula-2 или Ada), то переучивание дается с трудом, и не всем

Это не к тому, что C++ такой сложный, а C++ники какие-то особенные. Просто программирование на языках без GC требует других привычек и лучше бы, чтобы эти привычки формировались в самом начале.
Re[7]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 12:22
Оценка:
Здравствуйте, so5team, Вы писали:

S>Но при этом он даже свой пример не может записать в таком виде, чтобы не возникало вопросов из категории "но что за фигня? можно же проще!"


Вот именно, использование new там было вообще не в тему — даже в контесте его вопроса. Это лишь линший раз демонстрирует в какую кучу свалены мухи и котлеты в его голове. И сам он эту кучу разгребать не хочет, а тащит ее нам, чтоб мы разбирались в лабиринтах его сложного Квалиа.

S>Может это мое искаженное восприятие реальности, но по моим наблюдениям, если человек начинал учиться программировать на языках с GC и не прошел изначально через Си или C++ (или классический Паскаль, или даже Modula-2 или Ada), то переучивание дается с трудом, и не всем

S>Это не к тому, что C++ такой сложный, а C++ники какие-то особенные. Просто программирование на языках без GC требует других привычек и лучше бы, чтобы эти привычки формировались в самом начале.

Полностью согласен. Я и сам проходил по маршруту C++ -> C#. И знаю многих людей, которые преодолели этот путь без особого труда и в кратчайшие сроки. А вот в обратную сторону... что-то ни одного не припоминаю. Сплошные стоны и сопли.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 12:25 rg45 . Предыдущая версия . Еще …
Отредактировано 03.05.2023 12:24 rg45 . Предыдущая версия .
Re[8]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 03.05.23 12:54
Оценка:
Здравствуйте, T4r4sB, Вы писали:

S>> char t[] = {'t', 0};


TB>char t[] = "t";


Да, спасибо, так еще проще.
Re[2]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 13:56
Оценка:
Здравствуйте, DiPaolo, Вы писали:

S>>Ну и сразу вопрос — каким плагином или чем вы находите подобные вещи?


DP>Qt Creator сразу дает предупреждение:

DP>

DP>Potential leak of memory pointed to by 't' [clang-analyzer-cplusplus.NewDeleteLeaks]


А на то что тут c->V1 = t; — присваивается стековая область памяти, которая при выходе из функции как бы считается освобожденной?
Re[7]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 13:59
Оценка:
Здравствуйте, so5team, Вы писали:

S>
S>#include <iostream>

S>struct C1 {
S>    const char * V1;
S>};

S>C1 fun() {
S>    char t[] = {'t', 0};
S>    return { t };
S>}

S>int main() {
S>    C1 t = fun();
S>    std::cout << t.V1 << std::endl;
S>}

S>но не вот эту вот простыню из стартового сообщения.

Нужно было уточнить как раз — меня больше интересовал вопрос присваивания стековой памяти, которая освобождается при выходе из фукнции, переменной которая в куче.
Re[3]: Почему CLion и VS не предупреждают?
От: DiPaolo Россия  
Дата: 03.05.23 14:00
Оценка:
S>А на то что тут c->V1 = t; — присваивается стековая область памяти, которая при выходе из функции как бы считается освобожденной?



#include <iostream>

class C1 {
public:
    const char* V1;
};

C1* fun2()
{
    char t[2];
    t[0] = 't';
    t[1] = 0;

    C1* c = new C1(); // <-- выделил память
    c->V1 = t;

    return c; // <-- вернул указатель на выделенную память
}

int main()
{
    C1* t = fun2();
    std::cout << t->V1 << "\n";
} // <-- память из-под t никто не освободил
Патриот здравого смысла
Re[8]: Почему CLion и VS не предупреждают?
От: DiPaolo Россия  
Дата: 03.05.23 14:07
Оценка:
S>Нужно было уточнить как раз — меня больше интересовал вопрос присваивания стековой памяти, которая освобождается при выходе из фукнции, переменной которая в куче.



Кажется, у тебя есть какие-то пробелы в понимании указателей и работы с памятью. Вот тут почитай https://www.learncpp.com/cpp-tutorial/dynamic-memory-allocation-with-new-and-delete/. Там есть про стек и про хип (кучу, heap).
Патриот здравого смысла
Re[9]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 14:18
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Кажется, у тебя есть какие-то пробелы в понимании указателей и работы с памятью. Вот тут почитай https://www.learncpp.com/cpp-tutorial/dynamic-memory-allocation-with-new-and-delete/. Там есть про стек и про хип (кучу, heap).


Вы хотите сказать в этом программа корректна? Она же мусор выводит на экран при сборке в VS, к примеру.
Re[9]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 03.05.23 14:24
Оценка:
пробелы это слабые знание или знания выборочно
а у него пустота

он не хочет читать книги и вообще изучать
ему проще онлайн-троллинг на форуме где ему будут все рассказывать, рассжевывать
и замечу
все бесплатно!
Re[11]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 14:30
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Я уже запутался. Ты смешал в кучу два или три разных топика. Изначально речь шла про ворсинки статического анализа. Я показал, какой ворнинг выдает clang-analyzer.


Больше интересовал вопрос варнинга именно при присвоении стековой памяти.

DP>Далее твой вопрос про освобождение стековой памяти. На что я посоветовал почитать про стыковую память и память в куче, потому что налицо пробел в понимании работы памяти в плюсах.


Нет, именно в этом изначальный вопрос был — почему не выдается варнинг при присвоении стековой памяти переменной, которая явно выносит ее за пределы доступности.

DP>Выше есть мои коменты в коде. Там вроде все понятно.


Вы, похоже, тоже не заметили этой проблемы — увидели только что память не освобождена — а проблему присвоения стековой памяти — не заметили?
Re[12]: Почему CLion и VS не предупреждают?
От: DiPaolo Россия  
Дата: 03.05.23 14:35
Оценка:
S>Вы, похоже, тоже не заметили этой проблемы — увидели только что память не освобождена — а проблему присвоения стековой памяти — не заметили?

Не заметил. Я просто скопипастил то, что выдал статик аналайзер, о чем и был изначальный вопрос. Почему статический анализатор в моем случае не показывает ворнинг там — хз.
Патриот здравого смысла
Re[2]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 14:35
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Что использовать:

DP>- PVS
DP>- cppcheck

Ни один не показал проблему в коде


Если неиспользуемая переменая — то cppcheck дает варнинг. А тут его все устраивает

Сорри, чего-то PVS глюканул на CLion. На VS — норм.

Вопрос снимается.
Отредактировано 03.05.2023 17:13 Shmj . Предыдущая версия .
Re[3]: Почему CLion и VS не предупреждают?
От: pilgrim_ Россия  
Дата: 03.05.23 14:51
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ни один не показал проблему в коде



GCC с -Wall -O2 (без оптимизации почему-то не показывает варнинг) и PVS предупреждают об использовании локального адреса за пределами функции.

https://gcc.godbolt.org/z/dfo861h1M

  GCC
<source>: In function 'int main()':
<source>:24:27: warning: using a dangling pointer to 't' [-Wdangling-pointer=]
   24 |     std::cout << t->V1 << "\n";
      |                           ^~~~
<source>:11:10: note: 't' declared here
   11 |     char t[2];
      |          ^
<source>:24:27: warning: 't' may be used uninitialized [-Wmaybe-uninitialized]
   24 |     std::cout << t->V1 << "\n";
      |                           ^~~~
In file included from /opt/compiler-explorer/gcc-13.1.0/include/c++/13.1.0/iostream:41,
                 from <source>:1:
/opt/compiler-explorer/gcc-13.1.0/include/c++/13.1.0/ostream:662:5: note: by argument 2 of type 'const char*' to 'std::basic_ostream<char, _Traits>& std::operator<<(basic_ostream<char, _Traits>&, const char*) [with _Traits = char_traits<char>]' declared here
  662 |     operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
      |     ^~~~~~~~
<source>:11:10: note: 't' declared here
   11 |     char t[2];
      |          ^


  PVS, более человеческое предупреждение
<source>:16:1: warning: V507 Pointer to local array 't' is stored outside the scope of this array. Such a pointer will become invalid.


Но оба не предупреждают об утечке C1*.
Re[3]: Почему CLion и VS не предупреждают?
От: B0FEE664  
Дата: 03.05.23 15:08
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Ну перепишешь ты этот код на std::array и ссылки. Лучше станет? Нет

Станет лучше или нет — это смотря кому, но по крайней мере будет работать:

#include <array>
#include <iostream>
#include <memory>
#include <string>


class C1
{
public:
    std::shared_ptr<const std::array<char, 2>> V1;
};

std::shared_ptr<C1> fun2()
{
    std::shared_ptr<std::array<char, 2>> t = std::make_shared<std::array<char, 2>>();
    std::array<char, 2>& ref = *t;
    ref[0] = 't';
    ref[1] = '\0';

    std::shared_ptr<C1> c = std::make_shared<C1>();
    c->V1 = t;

    return c;
}

int main()
{
    auto t = fun2();
    std::cout << t->V1->data() << "\n";
}



#include <iostream>
#include <memory>
#include <string>

struct C1
{
    C1(const std::string& str) :  V1{str}{}
    const std::string V1;
};

std::shared_ptr<C1> fun2()
{
    std::string t = "t\0";
    std::shared_ptr<C1> c = std::make_shared<C1>(t);
    return c;
}

int main()
{
    auto t = fun2();
    std::cout << t->V1 << "\n";
}
И каждый день — без права на ошибку...
Re[4]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 03.05.23 15:22
Оценка:
Здравствуйте, pilgrim_, Вы писали:

_>PVS, более человеческое предупреждение

_><source>:16:1: warning: V507 Pointer to local array 't' is stored outside the scope of this array. Such a pointer will become invalid.

Прикольно, если переписать исходный пример нормально, с unique_ptr, PVS не выдает предупреждение. А вот GCC 13 -- выдает
https://gcc.godbolt.org/z/d87ohc4dE
Re[5]: Почему CLion и VS не предупреждают?
От: pilgrim_ Россия  
Дата: 03.05.23 15:25
Оценка:
Здравствуйте, so5team, Вы писали:

S>Прикольно, если переписать исходный пример нормально, с unique_ptr, PVS не выдает предупреждение. А вот GCC 13 -- выдает

S>https://gcc.godbolt.org/z/d87ohc4dE

Нет в мире совершенства , да и GCC почему-то только с оптимизацией выдаёт предупреждение.
Re[10]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 16:51
Оценка:
Здравствуйте, rg45, Вы писали:

R>>>Вот именно, использование new там было вообще не в тему — даже в контесте его вопроса. Это лишь линший раз демонстрирует в какую кучу свалены мухи и котлеты в его голове. И сам он эту кучу разгребать не хочет, а тащит ее нам, чтоб мы разбирались в лабиринтах его сложного Квалиа.


R>Ты правда ни хера не понял в моих словах? Скажи, что ты просто прикидываешься, ну пожалуйста!


Я не призываю так писать — мой вопрос лишь в статистическом анализаторе, который такие вещи сможет обнаружить.
Re[11]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 17:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Я не призываю так писать — мой вопрос лишь в статистическом анализаторе, который такие вещи сможет обнаружить.


Какие "такие"? Ты нахера утечку памяти туда воткнул, когда твой вопрос касался указателей и ссылок на локальные переменные, чье время жизни меньше времени жизни ссылок и указателей? А я скажу нахера — просто в голове у тебя полная каша. И вместо того, чтоб что-то читать и разбираться, ты тащишь всех своих тараканов сюда.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 17:11 rg45 . Предыдущая версия . Еще …
Отредактировано 03.05.2023 17:10 rg45 . Предыдущая версия .
Отредактировано 03.05.2023 17:08 rg45 . Предыдущая версия .
Re[9]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 03.05.23 17:21
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, rg45, Вы писали:


R>>Вот именно, использование new там было вообще не в тему — даже в контесте его вопроса. Это лишь линший раз демонстрирует в какую кучу свалены мухи и котлеты в его голове. И сам он эту кучу разгребать не хочет, а тащит ее нам, чтоб мы разбирались в лабиринтах его сложного Квалиа.


S>У меня как раз вопрос присваивания стековой памяти, которая освобождается при выходе из функции.


Одно из необходимых умений программиста — это способность составлять МИНИМАЛЬНЫЙ пример, иллюстрирующий проблему.
У тебя же в коде ещё и всякий мусор типа оператора new, кстати нахрена он нужен после 11 года?
Re[14]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 18:27
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Нахрена ты вообще туда new впендюрил, если тебе достаточно вернуть объект по значению?


Потому что программист на си шарп напишет программу на си шарп на любом языке программирования.

P.S. В си шарп нет возможности выбирать способ возврата из функций. Каким образом будет возвращаться тот или иной объект раз и навсегда прошито в типе объекта. Все типы делятся на две категории — ссылочные типы (reference types) и типы-значения (value types). В общем, там много всяких памперсов напридумано. Только очень часто случается, что эти памперсы не могут покрыть всю жопу и тогда появляются разного рода костыли: боксинг, in/out/ref параметры, nullable типы, недо-шаблоны, недо-деструкторы, недо-RAII и прочее уродство. В общем, "язык приятный во всех отношениях".
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 03.05.2023 18:50 rg45 . Предыдущая версия . Еще …
Отредактировано 03.05.2023 18:49 rg45 . Предыдущая версия .
Отредактировано 03.05.2023 18:47 rg45 . Предыдущая версия .
Отредактировано 03.05.2023 18:40 rg45 . Предыдущая версия .
Отредактировано 03.05.2023 18:39 rg45 . Предыдущая версия .
Отредактировано 03.05.2023 18:37 rg45 . Предыдущая версия .
Re[15]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 03.05.23 18:56
Оценка:
Здравствуйте, Shmj, Вы писали:

TB>>Нахрена ты вообще туда new впендюрил, если тебе достаточно вернуть объект по значению?


S>Задумка была — проиллюстрировать проблему присвоения стековой памяти и использовать его после удаления ее из стека.


Это как-то отвечает на вопрос: "Нахрена ты вообще туда new впендюрил"?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[15]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 03.05.23 19:11
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Задумка была — проиллюстрировать проблему присвоения стековой памяти и использовать его после удаления ее из стека.


Тогда почему ты не удосужился вычистить лишнее из примера? Этот вопрос не относится к знанию того или иного языка. Это общая инженерная культура, блин! Где твоя грёбаная культура нахрен?!
Re[6]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 03.05.23 21:05
Оценка:
Здравствуйте, pilgrim_, Вы писали:

_>Нет в мире совершенства , да и GCC почему-то только с оптимизацией выдаёт предупреждение.


и при замене
С1
на
std::string_view


тоже теряет предупреждения. Прямо скажем, очень ограниченно он диагностирует. Но и на том спасибо.
Re[3]: Почему CLion и VS не предупреждают?
От: AleksandrN Россия  
Дата: 03.05.23 21:37
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Ну перепишешь ты этот код на std::array и ссылки. Лучше станет? Нет


Если просто переписать 1 в 1, но и использованием array, то станет работать.
#include <iostream>
#include <vector>
#include <array>
#include <memory>

class C1
{
public:
    std::vector<char> V1;
};

std::unique_ptr<C1> fun2()
{
    std::array<char, 2> t = { 't', 0 };

    std::unique_ptr<C1> c = std::make_unique<C1>();
    c->V1.assign(t.begin(), t.end());

    return c;
}

int main()
{
    auto t = fun2();
    std::cout << t->V1.data() << "\n";
}


Но лучше
#include <iostream>
#include <vector>
#include <array>
#include <memory>

class C1
{
private:
    std::vector<char> V1;
public:
    C1(std::initializer_list<char> list) : V1(list) {};
    void print() const { std::cout << V1.data() << std::endl; }
};

C1 fun2()
{
    // Сработает RVO.
    return C1({ 't', 0 });
}

int main()
{
    auto t = fun2();
    t.print();
}
Re[2]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 21:53
Оценка:
Здравствуйте, PM, Вы писали:

PM>Запускаем CI c разными вариантами sanitizers которые встроены в GCC и Clang


Вот ради этого и стоило создать пост, пусть и подвергнувшись многочисленному высмеиванию. sanitizers, теперь буду знать что это существует.
Re[4]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 03.05.23 22:28
Оценка:
Здравствуйте, reversecode, Вы писали:

>>а что в С# настолько все плохо и нет работы, что шарписты набежали в тему С++ ?


Я, пока был в горячей точке под бомбами, — начал думать о состоянии IT глобально. Все равно электричества не было и делать было нечего.

Понял то, о чем раньше не задумывался — программы работают на девайсах. Т.е. программы никому не нужны без девайсов и исходить нужно из девайсов.

На листочке выписал самые популярные типы девайсов, как они работают и на чем можно писать программы для них. Вот так тупо.

Проанализировал все это и понял что от С++ все-равно никуда не уйти.
Re[3]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 04.05.23 07:55
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вот ради этого и стоило создать пост, пусть и подвергнувшись многочисленному высмеиванию. sanitizers, теперь буду знать что это существует.


Не только ради этого. Переснать использовать это гребаное new! Кресты это не шарпик. Оператор new устарел в том смысле в котором ты им пользуешься. И аллокация в куче у тебя тут нахрен не нужна
Re[10]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 04.05.23 08:20
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>мусор типа оператора new, кстати нахрена он нужен после 11 года?


Если не брать в рассмотрение placement new, то разве что для создания объектов с private/protected конструкторами.
Re[11]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 04.05.23 08:28
Оценка:
Здравствуйте, so5team, Вы писали:

S>Здравствуйте, T4r4sB, Вы писали:


TB>>мусор типа оператора new, кстати нахрена он нужен после 11 года?


S>Если не брать в рассмотрение placement new, то разве что для создания объектов с private/protected конструкторами.


Мне казалось что для этого используются статик методы, создающие объект
Re[12]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 04.05.23 08:39
Оценка:
Здравствуйте, T4r4sB, Вы писали:

S>>Если не брать в рассмотрение placement new, то разве что для создания объектов с private/protected конструкторами.


TB>Мне казалось что для этого используются статик методы, создающие объект


Простенький пример:
#include <memory>

class manager;

class worker {
    friend class manager;

    int i_;
    worker(int v) : i_{v} {};
public:
    int i() const noexcept { return i_; }
};

class manager {
public:
  int do_something() {
    std::unique_ptr<worker> in{ new worker(0) };
    return in->i_;
  }
};

int main() {
    manager o;
    return o.do_something();
}


В manager::do_something не получится использовать std::make_unique, т.к. конструктор у worker-а приватный.
И не важно, будет ли do_something статическим или нет.
Re[11]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 04.05.23 08:44
Оценка:
Здравствуйте, so5team, Вы писали:

TB>>мусор типа оператора new, кстати нахрена он нужен после 11 года?

S>... то разве что для создания объектов с private/protected конструкторами.
Да и тут во многих случаях (если я правильно понимаю, речь про make_shared/make_unique) необязательно. Но я тоже, бывает, делаю через new в таких случаях.

ну или если конкретный тип умного (или неумного) указателя может быть разным в шаблоне. Вроде такого(иллюстративно):

template<typename PTR>
PTR Dup(const PTR& srcPtr)
{
  // can't use `make_unique`/`make_shared`
  return PTR{new std::remove_cvref_t<decltype(*srcPtr)>{*srcPtr}};
}


Ну и наверняка что-то ещё реальное есть.
Отредактировано 04.05.2023 8:47 serg_joker . Предыдущая версия .
Re[13]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 04.05.23 09:08
Оценка:
Здравствуйте, so5team, Вы писали:

TB>>Мне казалось что для этого используются статик методы, создающие объект

S>Простенький пример:
S>[...]
В этом примере место создания `unique_ptr` находится вне `worker`, хоть и в дружественном классе.
T4r4sB предполагает, что такое как бы и должно решаться статик методами (и решается, но с оговорками, см. комментарии):

class worker {
private:
    int i_;
    worker(int v) : i_{v} {};

public:
    static std::unique_ptr<worker> Create(int v) {
#if 0
        // This one fails because `make_unique` tries to access private Ctor
        return std::make_unique<worker>(v);
#else
        // We are enforced to use `new` in this case.
        return std::unique_ptr<worker>{new worker(v)};
#endif
    }
};


т.е. проблема в том, что нам нужно вызвать `make_unique<worker>`, а уж он-то и не может добраться к нашему закрытому конструктору.

Решается либо через new, как в примере, либо через passkey idiom

Сделать `make_unique<worker>` другом, вроде как, нельзя.
Отредактировано 04.05.2023 9:14 serg_joker . Предыдущая версия . Еще …
Отредактировано 04.05.2023 9:13 serg_joker . Предыдущая версия .
Re[14]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 04.05.23 09:13
Оценка:
Здравствуйте, serg_joker, Вы писали:

_>т.е. проблема в том, что нам нужно вызвать `make_unique<worker>`, а уж он-то и не может добраться к нашему закрытому конструктору.


Да.

_>Решается либо через new, как в примере, либо через passkey idiom


Да.
Re[5]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 10:29
Оценка:
теперь то вас никто не бомбит
да и свет есть постоянно
можно же закинуть этот не понятный вам С++ и вернутся к вашей деятельности ?
Re: Почему CLion и VS не предупреждают?
От: Muxa  
Дата: 04.05.23 10:57
Оценка:
Почему ты вообще ожидаешь какие-то предупреждения от текстовых редакторов кода, но не от компилятора/анализатора/санитайзера/профайлера?
Отредактировано 04.05.2023 11:00 Muxa . Предыдущая версия .
Re[6]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 04.05.23 11:22
Оценка:
Здравствуйте, reversecode, Вы писали:

R>теперь то вас никто не бомбит

R>да и свет есть постоянно
R>можно же закинуть этот не понятный вам С++ и вернутся к вашей деятельности ?

Лучше иметь меньше денег, но больше перспектив и предложений.
Re[9]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 04.05.23 12:04
Оценка:
Здравствуйте, Shmj, Вы писали:


S>Для человека важна эмоциональная составляющая. Когда немного потроллил, облажался — уже лучше запомнишь.


Ну и где твое "спасибо" за обучение?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[9]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 12:08
Оценка:
домохозяйственнве проекты где вы сами себе главный это не работа программистом С++
кто вас собеседовал по знаниям С++ прежде чем вам дал ту работку ? ой никто ? ну я так и знал
давайте вы откроете djinn,киевский вы наш и подадитесь на пару вакансий где вас прособеседуют хотя бы джуны ?
результатом поделитесь в отдельном треиде на ктыве
желательно сразу в разделе — юмор

тыкать мне не надо, к частью мы не знакомы

резюмируйте что именно вы изучили через ваши набросы ?
смогут ли эти ваши знания подтвердить собесудуюшие вас люди ?
то есть делаем вывод — вы паразитирующий тролль пиявка, который никаких знаний так и не получил из своих набросов
кроме тех что легко гуглятся
но гугль не для вас
Re[8]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 04.05.23 12:15
Оценка:
Здравствуйте, reversecode, Вы писали:

R>само обучение через тролинг на форуме вам не поможет его изучить вообще никак


Фигня, я на геймдеве так кресты и изучил до приемлемого уровня. Вот чисто создавал темы в стиле "ваши кресты говно потому что на них нельзя делать так-то"
Re[10]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 04.05.23 12:27
Оценка:
Здравствуйте, DiPaolo, Вы писали:

S>>Для человека важна эмоциональная составляющая. Когда немного потроллил, облажался — уже лучше запомнишь.


DP> это называется паразитированием или использованием других людей. Дополнительный аргумент в лично мою сформировавшуюся позицию больше тебе не помогать.


Ты так говоришь будто тебе в напряг на форумах тусоваться.
Re[11]: Почему CLion и VS не предупреждают?
От: rg45 СССР  
Дата: 04.05.23 12:30
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну пока такой вариант лучше чем просто зубрить по книгам, скажем так.


S>Я хотя и выпендриваюсь тут, но к работе отношусь ответственно — максимально все проверяю, стараюсь не допускать косяков. Прогоняю через PVS и внимательно изучаю каждый варнинг.


S>Да я вообще против этих собеседований. У меня подход другой — давай сразу работать и в работе мы друг-друга проверим — подходим или нет. Собеседование ничего не дает. Есть спецы по прохождению собеседований — а толку?


Пообещай хотя бы, что про RAII почитаешь, когда-нибудь?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[11]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 12:38
Оценка:
умение запускать компилятор С++ и корректировать код С++
это не знания С++

собеседование это независимая инстанция которая может подтвердить ваши знания

в данном случае ваши знания 0

то что вы там себе по на придумывали про ваши качества и проверкой pvs
на ваше не умение писать код С++ никак не влияет
Re[9]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 12:41
Оценка:
знаю помню вы весь gamedev.ru зафлудили
но гемдев это отдельная банка с тараканами, им так нравится
здесь же форум по плюсам
Re[8]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 04.05.23 12:45
Оценка:
Здравствуйте, reversecode, Вы писали:

R>с вашими знаниями С++ вам никакие предложения не грозят

R>вы завалите все собеседования по С++, я вам гарантирую

К сожалению, рынок труда сложился так, что даже последние бездари в состоянии найти работу. По крайней мере, могли раньше.
Особенно поспособствовали этому аутсорс-компании, где прибыль формируется из разницы между ставками "за голову" (в рассматриевом случае — "за тело"), выставляемыми заказчику, и зарплатой.

Более того, с такого персонажа компания может даже заработать больше, если умудрится продать его как "сениора" (а таки да, умудряются), а тело готово работать "ниже рынка".

Я в таком работал, видел много примеров. Но на С++ проекты у нас догадывались всё-таки фильтровать.
Отредактировано 04.05.2023 12:52 serg_joker . Предыдущая версия .
Re[13]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 04.05.23 12:48
Оценка:
Здравствуйте, rg45, Вы писали:

R>Усваивает только наезды и оскорбления, похоже.


Думаю, что не усваивает, а воспринимает как естесственную часть "успешного троллинга".
Re[9]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 12:50
Оценка:
такое может прокатить только на апворке или условном аутсорсе
при устройстве в любую компанию собеса не избежать
даже в бодишоп
Re[10]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 04.05.23 12:58
Оценка:
Здравствуйте, reversecode, Вы писали:

R>такое может прокатить только на апворке или условном аутсорсе


А похоже, что ТС как раз в каком-то аутсорере и работает. Попал туда благодаря знаниям другого ЯП (того же C#, к примеру).
Далее его уже как имеющегося бойца продают очередному заказчику. Не так уж часто кто-то со стороны заказчика исполнителей собеседует.

Ну или он в каком-то российском интеграторе работает (что-то типа того же аутсора, только вид в профиль). Сперва трудился на каких-нибудь C# проектах. Сейчас на него и плюсовую работу вешают.

Т.е. ему уже не нужно собеседования проходить, он уже внутри какого-то контура, а продаваны из этого контура его впаривают клиентам. Возможно задорого.
Re[11]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 13:00
Оценка:
а зачем фантазировать
мы у него спросим
шмыга ты в бодишопе или на вольных хлебах ?

делаю ставку что он на вольных хлебах
Re[12]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 04.05.23 13:07
Оценка:
Здравствуйте, reversecode, Вы писали:

R>умение запускать компилятор С++ и корректировать код С++

R>это не знания С++

Добавлять новый функционал, который работает на 3 разных типах ОС — норм?

R>собеседование это независимая инстанция которая может подтвердить ваши знания


Я знаю что такое собеседования, сам их проводил. Не проходил а проводил. И знаю что это бесполезно.

Умение проходить собеседования — это отдельный навык, время на который мне даже тратить не хочется. Это нужно отдельно поднатореть под достаточно однотипные задачи, пособирать отзывы, посидеть на сайтах типа LeetCode. Пустая трата времени в общем.

Самое лучше собеседование — это покажи свой код.

Но даже это не гарантирует что чел. будет работать. Может знать теорию, а работать ленится и одни отмазки лепит. Или же занимается любимым велосипедом а не решает задачи бизнеса. Начинаешь его пинать чтобы не велосипед делал а решал задачи — обижается.

R>в данном случае ваши знания 0


Чем вы докажите свою компетентность, чтобы делать такие заявления?
Re[13]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 13:15
Оценка:
вы мне напоминаете меня в детстве
когда я был маленьким и только увидел С++ компилятор
я фиксил большие проекты как мне казалось(1мб сорс кода)
банальным запуском компилятора и разбором ошибок который он выдает
знаний по С++ у меня было на уровне 0

читая вас сейчас, понимаю что я мог бы тогда с уверенностью заявить что я программист С++
причем успешный, поскольку сбилденные программы запускались и работали

ваши знания 0 потому что их не может никто ни подтвердить ни проверить
собеседование это один из вариантов доказать ваши знания
вашего кода по тех двух С++ проектах которые вы якобы сделали тоже никто не видит
добавить пару функций это не знания С++
Re[13]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 13:33
Оценка:
когда конкретный вопрос надо задать аут оф контекс(reply было не ему), надо же как то обратиться
увы приходиться переходить к собеседнику на "ты"
на "вы" в таких случаях как то слишком почетно

если бы репли было на его сообщение, было бы на "вы"
Re[15]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 14:16
Оценка:
как только интернет стал больше чем он был, сразу в обиход пришло "вы"
что бы когда общаешься с маньяком или каким другим преследуемым законом
аналитика "органов" не сцапала вас за подельника
и к вам не набежали не нужные люди по месту жительства
Re[16]: Почему CLion и VS не предупреждают?
От: serg_joker Украина  
Дата: 04.05.23 14:20
Оценка:
Здравствуйте, reversecode, Вы писали:

Получается, Вы подельник Шимжа? Даже не знаю, маньяк на этом фоне не так и страшен. XD
Re[17]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 04.05.23 14:25
Оценка:
я думал что обьяснил?
когда идет репли-репли 1к1, то на "вы"
когда репли идет через третье лицо, то можно на "ты", потому что обращение идет аут оф контекст
я писал репли на so5team и обратится к шмыге на "ты", аналитика органов такое не просчитывает(пока еще)

так что в данном случае я хейтер шмыги


ладно, сдаюсь
он живет в соседнем подъезде
у него бородатая жена и много много шимжат
все над ними издеваются на районе
Отредактировано 04.05.2023 14:34 reversecode . Предыдущая версия .
Re[14]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 04.05.23 18:37
Оценка:
Здравствуйте, so5team, Вы писали:

S>Упомянутый здесь RussianFellow, полагаю, тоже не забесплатно работал. Он свой код здесь даже как-то засветил. Душераздирающее зрелище было.


S>Так что не показатель.


Это дело лично каждого. Если чел. видит для себя в этом смысл — почему нет? Ведь большая часть живущих особо ни на что не влияют и без них ход истории не особо изменится. Если чел. не в высшей лиге — это не значит, что он не имеет права на существование.
Re[15]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 05.05.23 04:55
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>Упомянутый здесь RussianFellow, полагаю, тоже не забесплатно работал. Он свой код здесь даже как-то засветил. Душераздирающее зрелище было.


S>>Так что не показатель.


S>Это дело лично каждого.


Что именно? Напомню, что мой комментарий касался того, можно ли считать "сделанные" проекты на C++ подтверждением знаний C++.

S>Если чел. видит для себя в этом смысл — почему нет? Ведь большая часть живущих особо ни на что не влияют и без них ход истории не особо изменится. Если чел. не в высшей лиге — это не значит, что он не имеет права на существование.


В огороде бузина, в Киеве дядка, в вашей башке говно. Вот примерно так выглядят ваши рассуждения о каких-то высших лигах и правах на существование.

Еще раз, специально для вас: пара проектов (которые никто из RSDN-еров не видел) не могут служить доказательством того, что вы владеете C++. Аналогичные случаи здесь (прямо на RSDN) уже встречались, как минимум, с персонажем RussainFellow.

PS. Вы собеседовали соискателей на какие должности? C# разработчик?
Re[16]: Почему CLion и VS не предупреждают?
От: Shmj Ниоткуда  
Дата: 05.05.23 05:38
Оценка:
Здравствуйте, so5team, Вы писали:

S>Что именно? Напомню, что мой комментарий касался того, можно ли считать "сделанные" проекты на C++ подтверждением знаний C++.


Почему вас это беспокоит то?

Постепенно с опытом достигаешь мастерства. Нет черты когда ты вдруг не знал а потом резко стал знать.

S>Еще раз, специально для вас: пара проектов (которые никто из RSDN-еров не видел) не могут служить доказательством того, что вы владеете C++. Аналогичные случаи здесь (прямо на RSDN) уже встречались, как минимум, с персонажем RussainFellow.


Мне нет необходимости вам что-либо доказывать.

К чему разговор? У вас ущемленная самооценка и вы хотите как-то ее поднять благодаря мне?
Re[17]: Почему CLion и VS не предупреждают?
От: so5team https://stiffstream.com
Дата: 05.05.23 06:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>Что именно? Напомню, что мой комментарий касался того, можно ли считать "сделанные" проекты на C++ подтверждением знаний C++.


S>Почему вас это беспокоит то?


Вы не ответили на вопрос. Посему повторю: к чему относилось "Это дело лично каждого"?

S>>Еще раз, специально для вас: пара проектов (которые никто из RSDN-еров не видел) не могут служить доказательством того, что вы владеете C++. Аналогичные случаи здесь (прямо на RSDN) уже встречались, как минимум, с персонажем RussainFellow.


S>Мне нет необходимости вам что-либо доказывать.


Как и возможности.

Но раз вы залупнулись про оценку чужой компетентности, а именно:

"Чем вы докажите свою компетентность, чтобы делать такие заявления?"

то логичным является адресация подобного вопроса в ваш адрес.

S>К чему разговор?


Считайте это платой за то, что вам на этом форуме помогают.
Re[17]: Почему CLion и VS не предупреждают?
От: AleksandrN Россия  
Дата: 05.05.23 08:13
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Постепенно с опытом достигаешь мастерства.


Если хочешь учится и достичь мастерства, сделай домашнее задание. Я в этой теме привёл пример кода
Автор: AleksandrN
Дата: 04.05.23
. Там есть потенциальная возможность стрельбы по ногам. В этих примерах не выстрелит, но если немного изменить данные — может. Твоя задача — найти и исправить эту потенциальную опасность.
Re[3]: Почему CLion и VS не предупреждают?
От: CreatorCray  
Дата: 05.05.23 10:16
Оценка:
Здравствуйте, Shmj, Вы писали:

S>а где вы будете искать того, кто согласится на C++?

Вопрос скорее стоит про "умеет в С++"
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[11]: Почему CLion и VS не предупреждают?
От: reversecode google
Дата: 07.05.23 11:28
Оценка:
на week_ptr вроде где то видел
Re[13]: Почему CLion и VS не предупреждают?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.05.23 11:38
Оценка:
Здравствуйте, rg45, Вы писали:

R>Усваивает только наезды и оскорбления, похоже.


Душераздирающее зрелище Эмоциональная составляющая же
Маньяк Робокряк колесит по городу
Re[11]: Почему CLion и VS не предупреждают?
От: T4r4sB Россия  
Дата: 07.05.23 13:34
Оценка:
Здравствуйте, K13, Вы писали:

K13>А реализацию двунаправленного списка получится написать без new?

K13>Без того чтобы все указатели сделать shared?

В написании своих контейнеров без ручного управления памятью не всегда можно обойтись, конечно же.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.