powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема в коде С++
25 сообщений из 33, страница 1 из 2
проблема в коде С++
    #39418581
benao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Есть код, подскажите пожалуйста почему программа падает в Segmentation Fault
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <iostream>

using namespace std;

int main()
{
    //cout << "Hello World!" << endl;

    string str("SignificaNce");
    unsigned int count = 0 ;

    for(auto i = str.size() - 1; i>=0; --i)
    {

        count +=static_cast<int>(str[i]>'i');

    }

    cout << count<<endl;


    return 0;
}
...
Рейтинг: 0 / 0
проблема в коде С++
    #39418622
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
benao,

auto -> size_t (unsigned)
...
Рейтинг: 0 / 0
проблема в коде С++
    #39418691
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
benao,

Код: plaintext
1.
for(auto i = str.size() - 1; i>=0; --i)



str.size() возвращает беззнаковое целое, оно всегда больше или равно нулю,
таким образом, ты написал бесконечный цикл, который сначала вызывает отрицательное переполнение
при --i, перескакивая с 0 на UINT_MAX, затем обращается по этому индексу к str[i], где, конечно же,
такого элемента нет. Происходит выход за границы массива и защита памяти.

Надо либо использовать целый со знаком индекс, либо изменить условие на

Код: plaintext
1.
for(auto i = str.size(); i>0; --i)



и в теле цикла использовать i-1
...
Рейтинг: 0 / 0
проблема в коде С++
    #39418752
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
    for(auto i = str.size() - 1; i>=0; --i)

всё таки бездумное использование auto - зло. Чего его повсюду стали пихать неокрепшие умы? Откуда эти ноги растут?
...
Рейтинг: 0 / 0
проблема в коде С++
    #39418978
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
безумное использование - вообще зло...
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419089
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, хорошо-бы в отладочном режиме понапихать ассертов. Я имею в виду библиотечном коде конечно.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419416
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychвсё таки бездумное использование auto - злоа было бы неплохо в IDE иметь такую фичу: автоматическую подстановку-замену auto на реальный тип. Иногда просто лень набирать 40-50 букв...
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419462
jmp_original
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychвсё таки бездумное использование auto - зло. Чего его повсюду стали пихать неокрепшие умы? Откуда эти ноги растут?
А решалось это дело очень просто: достаточно было запретить превращение auto в "простые" типы. И всё. Нет никаких проблем.
...
Меня сейчас освистают и зафукают и скажут, что и так нет никаких проблем. Только вот пример ТС доказывает обратное. Я не против нововведений в языке (хотя на мой взгляд проще и понятнее(!) было бы сделать какой-нибудь C-next), я против бездумных нововведений. Какое было бы "думным"? Смотрите предыдущий абзац.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419805
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalegorychвсё таки бездумное использование auto - зло. Чего его повсюду стали пихать неокрепшие умы? Откуда эти ноги растут?
А решалось это дело очень просто: достаточно было запретить превращение auto в "простые" типы. И всё. Нет никаких проблем.
...
Меня сейчас освистают и зафукают и скажут, что и так нет никаких проблем. Только вот пример ТС доказывает обратное. Я не против нововведений в языке (хотя на мой взгляд проще и понятнее(!) было бы сделать какой-нибудь C-next), я против бездумных нововведений. Какое было бы "думным"? Смотрите предыдущий абзац.

Я думаю, всё же проблема НЕ в auto , а в том, как автор его использовал.
Ошибка-то не в объявлении параметра цикла, а в условии выхода из цикла.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419812
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jmp_originalА решалось это дело очень просто: достаточно было запретить превращение auto в "простые" типы. И всё. Нет никаких проблем.и таким образом сразу исключаем простые типы из обобщённых алгоритмов, действительно, зачем они там)))
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419819
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЯ думаю, всё же проблема НЕ в auto , а в том, как автор его использовал.
Ошибка-то не в объявлении параметра цикла, а в условии выхода из цикла.да, я именно об этом. Написать size_t не многим сложнее, чем auto, зато сразу было бы видно, где порылся конь.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419906
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychMasterZivЯ думаю, всё же проблема НЕ в auto , а в том, как автор его использовал.
Ошибка-то не в объявлении параметра цикла, а в условии выхода из цикла.да, я именно об этом. Написать size_t не многим сложнее, чем auto, зато сразу было бы видно, где порылся конь.
int еще проще было написать, и даже бы работало =)
...
Рейтинг: 0 / 0
проблема в коде С++
    #39419931
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl int еще проще было написать, и даже бы работало =)варнинг только какой-то непонятный был бы, ну да кто же их читает =)
...
Рейтинг: 0 / 0
проблема в коде С++
    #39420338
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSiemargl int еще проще было написать, и даже бы работало =)варнинг только какой-то непонятный был бы, ну да кто же их читает =)Бывает.
На меня на Хабре как то напал маньяк, размахивал транспарантом с надписью -pedantic-errors и угрожал связями с комитетом по стандартизации =)
...
Рейтинг: 0 / 0
проблема в коде С++
    #39420355
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychда, я именно об этом. Написать size_t не многим сложнее, чем auto, зато сразу было бы видно, где порылся конь.
Тем кому сразу видно, тем и с авто видно. А остальным не поможет.
Так что не надо перекладывать с больной головы на здоровую.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39420411
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТем кому сразу видно, тем и с авто видно.это здесь видно, в коде из 3х строчек. С size_t читать код было бы проще, не надо за компилятор выполнять работу по расшифровке этого auto. Второй раз вижу тему, где его неуместное использование приводит к её ( темы ) появлению. И оба раза то char, то size_t. Удивительно мне это
...
Рейтинг: 0 / 0
проблема в коде С++
    #39420635
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

А сколько было тем, когда программа падает потому что чувак выходил за границы массива. Предлагаю запретить массивы ))
...
Рейтинг: 0 / 0
проблема в коде С++
    #39420659
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyПредлагаю запретить массивы ))Предлагаю запретить! =))

PS я ведь не против auto, есичё
...
Рейтинг: 0 / 0
проблема в коде С++
    #39421127
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl int еще проще было написать, и даже бы работало =)кстати, да о_О

а почему бы не запретить auto везде кроме шаблонов, где без них никак?
...
Рейтинг: 0 / 0
проблема в коде С++
    #39421214
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

Например, потому что лень писать

Код: plaintext
1.
std::map< std::string, std::tuple< int, unsigned, double> >::const_iterator p = my_map.find( ... );
...
Рейтинг: 0 / 0
проблема в коде С++
    #39421285
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivлень писать
Дело не только в лени, но и в отсутствии опечаток и главное - в обобщенности алгоритма.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39421310
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНапример, потому что лень писатьAnatoly MoskovskyДело не только в лени, но и в отсутствии опечаток и главное - в обобщенности алгоритма.using?
...
Рейтинг: 0 / 0
проблема в коде С++
    #39421355
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbusing?
Локальность кода хуже.
Да и вообще объявлять отдельно тип который в большинстве случаев нужен только для временной переменной - как то из пушек по воробьям.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39422766
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЛокальность кода хуже.что такое локальность кода хуже?Anatoly MoskovskyДа и вообще объявлять отдельно тип который в большинстве случаев нужен только для временной переменной - как то из пушек по воробьям.если тип используется 1-2 раза, то написал полностью и забыл, да, нет смысла в using. Если же постоянно - очень даже удобно.
...
Рейтинг: 0 / 0
проблема в коде С++
    #39424503
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivbenao,

Код: plaintext
1.
for(auto i = str.size() - 1; i>=0; --i)



str.size() возвращает беззнаковое целое, оно всегда больше или равно нулю,
таким образом, ты написал бесконечный цикл, который сначала вызывает отрицательное переполнение
при --i, перескакивая с 0 на UINT_MAX,Точнее, на std::numeric_limits<size_t>::max().

egorychPS я ведь не против auto, есичёА я против. auto часто означает «программисту было лень написать тип». Облегчает написание кода, но усложняет его чтение. Особенно когда нет умной IDE (смотрим историю изменения кода в системе контроля версий; смотрим код в online-репозитории). Хотя в некоторых случаях без auto не обойтись, например когда надо лямбда-функцию сохранить в локальную переменную:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void work_with_points(double tolerance) {
  // не можем написать тип, потому что он сгенерирован компилятором
  auto almost_equal = [=](double a, double b) {return fabs(a - b) <= tolerance;};
  ...
  if (almost_equal(x1, x2) && almost_equal(y1, y2)) {
    ...
  }
  ...
}


MasterZivCEMb,

Например, потому что лень писать

Код: plaintext
1.
std::map< std::string, std::tuple< int, unsigned, double> >::const_iterator p = my_map.find( ... );

typedef-ы надо использовать. Кстати, tuple -- аналогичное зло, означает «программисту было лень придумать имена полей». Опять же, облегчает написание кода, но усложняет его чтение.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема в коде С++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]