将字符串转换为wstring时崩溃

时间:2016-08-14 07:54:02

标签: c++ regex http

我将以下函数在将字符串转换为wstring时随机崩溃。它用于解析HTTP标头(http://www.codeproject.com/Articles/66625/A-Fully-Featured-Windows-HTTP-Wrapper-in-C)并且始终工作正常,但是当我最近更改服务器时它随机停止工作。 (此代码来自codeproject项目附带的类)

inline bool ParseRegExpW(const wstring &regExp, bool caseSensitive, int groupCount, const wstring &source, vector<wstring> &result, bool allowDuplicate = false)
{
    const string regEXP = string(regExp.begin(), regExp.end());
    const string Source = string(source.begin(), source.end());
    vector<string> Result;
    if (result.size() != 0){
        for (int i = 0; i < result.size(); i++) {
            Result[i] = string(result[i].begin(), result[i].end());
        }
    }
    bool res = ParseRegExp(regEXP, caseSensitive, groupCount, Source, Result, allowDuplicate);
    if (Result.size() != 0){
        for (int i = 0; i < Result.size(); i++) {
            printf("Result: %i->%s L: %i : R %i r %i\n", i, Result[i].c_str(), Result[i].length(), Result.size(), result.size());//Result[i] contains what it should contain
            if (i < Result.size()){
                printf("Converting...\n");
                result[i] = wstring(Result[i].begin(), Result[i].end());
                printf("Will crash before getting there..\n");
            }
        }
    }
    return res;
}

为什么会这样?对我来说很奇怪,它在过去的几个月里运行良好,并在我更换服务器时停止工作。

1 个答案:

答案 0 :(得分:0)

假设result.size() == 0,当你进入那个循环并且...... {/ p>

result[i] = wstring(Result[i].begin(), Result[i].end());

...然后,无论i的值如何,由于访问了向量中不存在的元素,您将获得未定义的行为

如果result.size() != 0,那么将执行此代码路径,...

vector<string> Result;
if (result.size() != 0){
    for (int i = 0; i < result.size(); i++) {
        Result[i] = string(result[i].begin(), result[i].end());
    }
}

...对于空向量Result具有相同的问题。

我想知道这怎么可能有用。