【发布时间】:2016-08-14 16:13:34
【问题描述】:
以下函数在将字符串转换为 wstring 时随机崩溃。它用于解析 HTTP 标头(http://www.codeproject.com/Articles/66625/A-Fully-Featured-Windows-HTTP-Wrapper-in-C)并且一直运行良好,但是当我最近更改服务器时它随机停止工作。 (此代码来自codeproject项目自带的类)
inline bool ParseRegExpW(const wstring ®Exp, 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;
}
为什么会这样?对我来说太奇怪了,过去几个月它运行良好,当我更换服务器时停止运行。
【问题讨论】:
-
operator[]不将任何新元素插入std::vector。所以如果result.size() != 0这也会崩溃。 -
vector<string> Result;创建一个大小为零的向量。添加内容时应使用Result.push_back()而不是Result[i]。 -
另外,同时拥有
result和Result只是乞求一两个错字!