@sresort

В чем логическая ошибка сигсегва?

https://pastebin.com/VT1itjwE
Пишу алгоритм нарайаны, ловлю сигсегв.. Почему конкретно происходит сигсегв понимаю, в функции swap, но вот с точки зрения реализации алгоритма нет... Вроде делаю все так - как говорят делать в алгоритме? В чем проблема
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Проблема в том, что "214" - это строковая константа. Поэтому char *num = "214"; инициализурует указатель num адресом этой константы. Сама эта константа, видимо, лежит в read only памяти. Поэтому когда вы в алгоритме попытаетесь что-то в массив записать, программа упадет.

Если вы внимательно почитаете вывод компилятора (желательно с ключем "-Wall"), то он вам про это выдаст варнинг:
main.cpp:54:17: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]


Надо делать так:
char num[] = "214";

Ну еще у вас там в коде ошибка с непроставленным где надо +1 у index. Разворачивать надо кусок правее только что увеличенного элемента. А вы разворачиваете вместе с ним. Поэтому ваша программа еще и повиснет.

Ну и первую перестановку ваш код не выводит.

И последнее, вместо for (; index != -1;) лучше использовать while (index != -1)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В чем проблема

ну например find_index_bigger_element может вернуть -1, но ты это не проверяешь и сразу используешь полученный индекс в swap
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы