382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||
1 | ||||||
Segmentation fault (iterator)27.12.2013, 00:52. Показов 1030. Ответов 7
Метки нет Все метки)
(
И снова здравствуйте!
Кратко: функция некоторым образом парсит строку (не в этом проблема) и удаляет из нее НЕ алфавитно-цифровые символы. Призываю не обдумывать возможные частные случаи, которые еще не предусмотрены в функции, ибо пока входная строка "подгоняется", чтобы регулярное выражение нашло то, что искало. Прошу помощи ибо бесконечный цикл в 51 строке уморил основательно. Я так понял проблема с итератором mainIter
0
|
|
27.12.2013, 00:52 | |
Ответы с готовыми решениями:
7
Segmentation Fault Segmentation fault
Segmentation fault |
gromo
|
27.12.2013, 02:16
[ТС]
#3
|
0
|
Форумчанин
![]() ![]() 8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
27.12.2013, 02:31 | 4 | |||||
Он у вас случайно в std::string::npos не уперся?
Добавлено через 28 секунд Что говорит отладчик и трассировка? Добавлено через 5 минут
1
|
║XLR8║
|
||||||
27.12.2013, 04:16 | 5 | |||||
Собственно вот твой вечный цикл и падение из-за доступа к черту на куличики.
Добавлено через 1 минуту Вот весь цикл надеюсь комментарии лишние Добавлено через 1 минуту На всякий случай
Добавлено через 2 минуты Не по теме: gromo, ставь линк на мой ник в след раз
1
|
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||
27.12.2013, 22:38 [ТС] | 6 | |||||
Выяснилось, что еще и как
![]() В чем прикол? Ваш код генерирует строку со всеми НЕ алфавитно-цировыми символами. Может вас смутило то, что я не создаю новую строку, а заменяю все ненужные символы на пробелы - просто это для меня более оправдано, потому что если удалять символы, то это может привести к перераспределению памяти, что в моем случае критично - иногда строки могут быть чертовски большими (а функция, которой дальше передается эта строка пробелы игнорирует) outoftime, ![]() ![]() ![]() Добавлено через 17 часов 18 минут Может кому понадобится исправленный и оптимизированый вариант. (функция чистит строку, оставляя только валидные для числа символы. Правила описаны в комментариях к коду)
0
|
Форумчанин
![]() ![]() 8194 / 5044 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
||||||
27.12.2013, 22:55 | 7 | |||||
Почитайте про анти-паттерн "Accidental complexity" (Ненужная сложность).
если учесть что под "чистит" подразумевается вставка пробелов заместо символа и что "валидные для числа символы" означает то же, что вы говорили выше то простое решение вот:
0
|
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
27.12.2013, 23:10 [ТС] | 8 |
Я вас понимаю, но здесь некоторые дополнительные требования к очистке:
1) Если первый непробельный символ в строке это '-', то НЕПОСРЕДСТВЕННО за ним должен следовать алфавитно-цифровой символ и только тогда число будет считаться отрицательным. (в противном случае все минусы отбрасываются) 2) Если в строке много десятичных точек, только первое вхождение [[:alnum:]]+\.[[:alnum:]]+ будет засчитано как разделитель дробной и целой частей, остальные точки будут отброшены. Кому надо, может удалять ненужные символы, но мне это не нужно и если учесть, что строки порой будут в несколько миллиардов знаков, то лишнее перераспределение памяти может дорого обойтись. А за антипаттерн спасибо, почитаю. Я тоже стараюсь следовать Главному Техническому Императиву Разработки ПО ![]() Добавлено через 2 минуты А выше я писал следовательно, если НЕ алфавитно-цифровые удаляются из строки, то они НЕ валидные для числа, не находите?
0
|
27.12.2013, 23:10 | |
Помогаю со студенческими работами здесь
8
Segmentation fault
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |