Форум программистов, компьютерный форум CyberForum.ru

Regex_replace краши - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Error C2059: Синтаксическая ошибка: тип http://www.cyberforum.ru/cpp-beginners/thread1227406.html
Вот отрывок кода, указывает, что ошибка на 5ой и 16ой строке, то есть функция min и max. ошибка: 1>c:\users\андрей\documents\visual studio 2010\projects\sb\sb\data.c(5): error C2059: синтаксическая ошибка: тип 1>c:\users\андрей\documents\visual studio 2010\projects\sb\sb\data.c(16): error C2059: синтаксическая ошибка: тип static int min(int a, int b) {
C++ Очистка динамической памяти в структуре И снова здравствуйте. Столкнулся с проблемой. Есть задача - написать программу "Телефонный справочник" на основе класса Tree (бинарное дерево), реализовать там всякие функции, не суть важно какие. Класс Tree есть, описывать его не буду, вопрос не в нем. Есть структура, которая содержит данные абонента, и которая является узлом бинарного дерева: struct Subscriber { char * FIO; char *... http://www.cyberforum.ru/cpp-beginners/thread1227393.html
C++ Функция, которая получает в качестве параметров два целых числа и возвращает сумму
Написать функцию, которая получает в качестве параметров два целых числа и возвращает сумму чисел из диапазона между ними Помогите:-| Буду очень благодарен.
C++ Функция рисует на экране треугольник, высота которого зависит от переданного значения параметра
Написать функцию, которая принимает один параметер типа int - высоту. Данная функция рисует на экране треугольник, высота которого зависит от переданного значения параметра. Помогите, пожалуйста:cry: "Програмирую" только 2-й месяц на Визуал Студио, так что если можно то попроще)
C++ Ищу людей, которые изучают язык C++ http://www.cyberforum.ru/cpp-beginners/thread1227368.html
Ищу людей, которые изучают язык с++, так же как и я. В какой-то момент я понял, что изучать язык в одиночку - это очень тяжело, много чего было бы быстрее изучено, если был бы человек, с которым можно посоветоваться или спросить то или иное(чего не допер сам), чтобы была выгода и для меня и для этого человека. Вот и возник такой вопрос: "Где я смогу найти человека (или людей), с которым можно...
C++ MSVS 2013 пкм->рефакторинг (переименование переменных во всем проекте) В MSVS 2013 в проектах написанных на шарпе можно тыкнуть пкм по переменной/классу выбырать рефакторинг и переименовать переменную везде, где она встречается. В проекте на с++ этого меню по пкм просто нет... Оно где-то спрятано или не существует в принципе? подробнее

Показать сообщение отдельно
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
17.07.2014, 12:43  [ТС]     Regex_replace краши
Цитата Сообщение от castaway Посмотреть сообщение
Какой компилятор то?
MSVS 2013
Цитата Сообщение от Renji Посмотреть сообщение
1) Посмотреть сколько всего строк болтается в стеке вызовов. Если буквально 100500, значит искать кривую рекурсию.
Где посмотреть?
Цитата Сообщение от Renji Посмотреть сообщение
3) Обрезать код до загрузки inputTextStr и выполнения inputTextStr = std::regex_replace(inputTextStr, rgExRule, matchAndRules.at(v).at(1)); Все остальное выкинуть.
Если после всего этого программа продолжает падать, остается лишь считать что кривая библиотека регэекспов.
Обрезал до:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <ctime>
 
#include <regex>
#include <string>
 
#include <fstream>
#include <iomanip>
 
#include <vector>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "RUS");
 
 
    string inputTextStr; // строка
 
    ifstream inputTextFile; inputTextFile.open("I:\\Downloads\\RegExp\\inputText.txt", ios::binary);
    if (inputTextFile.good())
    {
        inputTextFile.seekg(0, ios::end);
        inputTextStr.resize(inputTextFile.tellg());
        inputTextFile.seekg(0, ios::beg);
 
        inputTextFile.read((char*)inputTextStr.data(), inputTextStr.size());
        inputTextFile.close();
    }
 
    cout << "1:\n";
    string str1 = "\\]((.|\\n)*?)(ITEM=tm_)";
    string str2 = "%%%%% %%%%%";
    std::regex rgExRule(str1, std::tr1::regex_constants::icase);
    inputTextStr = std::regex_replace(inputTextStr, rgExRule, str2);
    cout << inputTextStr;
    cin.get();
}
Опытным путем установлено, что конструкция ((.|\\n)*?) приводит к крашам за исключением очень коротких файлов в пару десятков строк. Чем больший кусок текста охватывает правило, тем меньший должен быть по размеру файл. Что собственно очень хорошо вписывается в краши ((.|\\n)*?). Там размер какого-нибудь буфера не ограничен случаем?
Цитата Сообщение от DarkMasterW Посмотреть сообщение
^(\\[TEMPLATE.*\\])(\\n)((.|\\n)*?)(item=)(i_gold) - крашит.
^(\\[TEMPLATE.*\\])(\\n)((.|\\n)*?)(item=)(i_) - шуршит.
Этот кусок так же в целом вписывается. Строки (item=)(i_) встречаются через одну, (item=)(i_gold) может и раз через двадцать могут быть. Правда от \\[TEMPLATE.*\\] она всегда находится в 0-2 строках, что несколько озадачивает.
 
Текущее время: 23:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru