Рейтинг темы:
  • 1 Голос(ов) - 1 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Мертвый код
#11
Утечки там не будет, если только компилятор не волшебный. Это visual c++ функция, ну для кодеров может быть и не заменимая
PHP код:
<?php 
string test
() {
return
"test string"
}

void work(string_view test) {
//работа с строкой
}

work(test())
Ответ
#12
Gattsu Написал:Утечки там не будет, если только компилятор не волшебный. Это visual c++ функция, ну для кодеров может быть и не заменимая
PHP код:
<?php 
string test
() {
return
"test string"
}

void work(string_view test) {
//работа с строкой
}

work(test())

Какой интересный код. А work("test string") не проще будет? Sad

Если вы считаете, что такое имеет место быть для обсуждения, так предложите собственные уроки по мастер классу - что и как делать не комильфо, а что является моветоном. И что правильно, а что нет.

А так, бред какой-то абстрактный пишите.
Родился, живу и когда-нибудь умру.
Ответ
#13
Donatte Написал:Какой интересный код. А work("test string") не проще будет? Sad

Если вы считаете, что такое имеет место быть для обсуждения, так предложите собственные уроки по мастер классу - что и как делать не комильфо, а что является моветоном. И что правильно, а что нет.

А так, бред какой-то абстрактный пишите.

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

Ситуация обрисовывает сложность работы с память, в данном случае это условность. Демонстрирует проблемы с временем жизни переменной, в данной ситуации когда, в стек записывается указатель на строку, но после
возврата указатель может оказаться не валидным, затереться другим значением. В рамках данной ситуации это практически невозможно, но если подобный код будет использовать в среде с высокой конкуренцией, где тысячи нитей исполнения, может быть ой как бо-бо, а такие участки очень тяжело отследить, тут он тривиальный.

Для вас бред, а для людей, которые этим профессионально занимаются, в с++ это основная проблема

Вопрос демонстрирует не компетенцию, всем хочется дать глупый совет, что во всем разбираетесь лучше всех и что ни кто не знает. Уважаемые это основа. Русское комюнити очень отличается на фоне всех, жадностью и зазнайством
Ответ
#14
Gattsu Написал:Утечки там не будет

PHP код:
<?php 
char
* test() {
return
"test";
}

в данном случае это утечка. память занятая под "test string" не высвободится по выходу из функции. в том числе в любой "среде с высокой конкуренцией, где тысячи нитей исполнения"

а вот так уже нет утечки но есть невалидный указатель:

PHP код:
<?php 
char
* test() {
char s[100]="test";
return
s;
}

а причина в том что преобразование типов компилятора visual c++ делает так:

"test"
это не char* а const char*
а как всем вроде известно
"const переменные размещаются в области памяти предназначенной только для чтения."

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

Добавлено через 14 минут
ну и если все таки остались сомнения то пожалуйста проверьте

Код:
char * test1()
{
    char s[100] = "test";
    return s;
}

char * test2()
{
    return "test";
}

int main()
{

    char * x = test1();
    *x = 'T'; // Тут 1000 нитей перепишет значение в памяти
    x = test2();
    *x = 'T'; // а тут будет исключение

    return 0;
}
Ответ
#15
Gattsu Написал:Ну просто тут туева туча экспертов во всех областях, я прям в академию наук попал.

"Бери ношу по себе, чтобы не падать при ходьбе." Иными словами - начали тему за мёртвый код, продолжайте и не зазнавайтесь своими ребусами. Пишите частые ошибки в коде и разбирайте их.

Gattsu Написал:Для вас бред, а для людей, которые этим профессионально занимаются, в с++ это основная проблема

Люди, которые занимаются этим профессионально могут допускать такие ошибки только от сильного переутомления. Ибо всё основное они обрисовывают крайне быстро и не плодят глупый код с пометкой "потом допилю и отшлифую". А в последующем дебаге приложения естественно следят за памятью. Нет?

Gattsu Написал:Русское комюнити очень отличается на фоне всех, жадностью и зазнайством

Это харизма русского коммюнити. Если её убрать, то оно умрёт. Писать почему именно так не буду. Все про это знают.
Родился, живу и когда-нибудь умру.
Ответ
#16
MHard Написал:
PHP код:
<?php 
char
* test() {
return
"test";
}

в данном случае это утечка. память занятая под "test string" не высвободится по выходу из функции. в том числе в любой "среде с высокой конкуренцией, где тысячи нитей исполнения"

а вот так уже нет утечки но есть невалидный указатель:

PHP код:
<?php 
char
* test() {
char s[100]="test";
return
s;
}

а причина в том что преобразование типов компилятора visual c++ делает так:

"test"
это не char* а const char*
а как всем вроде известно
"const переменные размещаются в области памяти предназначенной только для чтения."

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

Добавлено через 14 минут
ну и если все таки остались сомнения то пожалуйста проверьте

Код:
char * test1()
{
    char s[100] = "test";
    return s;
}

char * test2()
{
    return "test";
}

int main()
{

    char * x = test1();
    *x = 'T'; // Тут 1000 нитей перепишет значение в памяти
    x = test2();
    *x = 'T'; // а тут будет исключение

    return 0;
}
ЧТД

Могу узнать Вы занимаетесь профессионально, в IT сфере? Если да, то идите печь пирожки
Вы слышите что я говорю про потерю указателя, затирание, на указываемую область памяти

Для одаренных людей
PHP код:
<?php 
string get_url
() {
return
"http://site-dlya-odarenih-ludey-i-porno.vata";
}

string_view get_scheme_from_url(string_view url) {
unsigned colon = url.find(':');
return
url.substr(0, colon);
}

int main() {
auto scheme = get_scheme_from_url(get_url());

cout << scheme << endl;
return
0;
}

Эту проблему описываю не я, а люди умнее меня, можете пройти мимо и не показывать свою глупость?


ПС Я знаю что такое указатель на не изменяемую область памяти, читай что пишу не ищите скрытого смысла. Есть такое понять чтение, а может надо подсчитать количество элементов в строке? Ужас просто


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

Добавлено через 12 минут
Donatte Написал:Люди, которые занимаются этим профессионально могут допускать такие ошибки только от сильного переутомления. Ибо всё основное они обрисовывают крайне быстро и не плодят глупый код с пометкой "потом допилю и отшлифую". А в последующем дебаге приложения естественно следят за памятью. Нет?
ну-ну, прям роботы, почему тогда нету идеального ПО, хотя вот оно.
Делает, то что от него ждут
int main() { cout << 1 + 1 << endl; return 0; }

Вы явно не сталкивались с недельной отладкой, где ошибка скрывалась в ошибке округления ieee754 стандарта, когда накапливается погрешности, и потом все к чертям. Такие места проявляться могут через месяц, а то и год, работы. Кто что там писал уже не помнят. Я видел программный продукт, с нагромождением 15 лет разработки, вот это хардкор отладки.
Заострю внимание cстандарт с плавающей точкой, которому хер знает сколько лет, а ошибка там. "Снимите розовые очки"

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



Donatte Написал:Это харизма русского коммюнити. Если её убрать, то оно умрёт. Писать почему именно так не буду. Все про это знают.

Это невежество и глупость русского комюнити, я про IT сферу.
Ответ
#17
сколько гонора :ugar:

Вы спрашивали в чем проблема данного кода

char* test() {
return "test";
}

а теперь тулите

string get_url() {
return "http://site-dlya-odarenih-ludey-i-porno.vata";
}

char * и std:Confusedtring это не одно и тоже во втором случае это даже не указатель на экземпляр класса а сам экземпляр класса

так вот в чем проблема данного кода я сказал, и подтвердил.
если можете аргументировать то вперед, а выражения "Писать как можно не нужно" наталкивает на ваше родство с кличко. "не только лиш каждый может смотреть в завтрашний день?"
Ответ
#18
MHard Написал:сколько гонора :ugar:

Вы спрашивали в чем проблема данного кода

char* test() {
return "test";
}

а теперь тулите

string get_url() {
return "http://site-dlya-odarenih-ludey-i-porno.vata";
}

char * и std:Confusedtring это не одно и тоже во втором случае это даже не указатель на экземпляр класса а сам экземпляр класса

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

return "test" остался, остался и указатель на строку. Можно оставить указатель, вы тут начинаете сежать, я же просил не показывать глупость, есть такая вещь неявное преобразование. Ну уже сказали что тут переполнение памяти, хоть это не так так как это литерал константа строка и она храниться в data в ELF или EXE без разницы
Ответ
#19
Gattsu Написал:Пирожки говорю ни как иначе

return "test" остался, остался и указатель на строку. Можно оставить указатель, вы тут начинаете сежать, я же просил не показывать глупость, есть такая вещь неявное преобразование. Ну уже сказали что тут переполнение памяти, хоть это не так так как это литерал константа строка и она храниться в data в ELF или EXE без разницы

ооо
это
string get_url() {
return "http://site-dlya-odarenih-ludey-i-porno.vata";
}

эквивалентно этому

string get_url() {
string str = "http://site-dlya-odarenih-ludey-i-porno.vata";
return str;
}
и этому
string get_url() {
string a("http://site-dlya-odarenih-ludey-i-porno.vata");
return a;
}

разницу улавливаеш как срабатывает преобразование типов ? XD

в данном случае "http://site-dlya-odarenih-ludey-i-porno.vata" передается в конструктор класса string
Ответ
#20
MHard Написал:ооо
это
string get_url() {
return "http://site-dlya-odarenih-ludey-i-porno.vata";
}

эквивалентно этому

string get_url() {
string str = "http://site-dlya-odarenih-ludey-i-porno.vata";
return str;
}

разницу улавливаеш как срабатывает преобразование типов ? XD

кто мой код еще переделывает, я привел конкретный пример,


Вы тупы? У вас проблем врач не обнаружил?

Привер

return "sddasasdsadsaddsa"


просто пздц пройдите мимо



Люди у которых докторские степени и Вы? не чувствуете разницы? Которые разрабатывают системы которые используете Вы? Вам лишь бы поспорить?
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Мертвый пет Отто 3 1,552 07-13-2012, 01:46 PM
Последний пост: Zubastic

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)