我已经在线搜索过,但没有一个对我有帮助。这是导致错误的代码:已编辑以包含更多代码。给我在Visual Studio 2013中的R6010调试错误。
do
{
rLength = recv(s1, rBuf, 1, 0);
if (rLength > 0)
{
rData += rBuf[0];
if (rBuf[0] == nByte[0])
{
switch (rData[0])
{
case 'C':
uid = rData.substr(1, 3);
statSend = "00" + uid + "ST" + userinfo;
charStat = statSend.c_str();
lLength = send(s1, charStat, strlen(charStat) + 1, 0);
break;
case 'M':
if (rData[4] == 'C' && rData[5] == 'H');
{
size_t start = 6;
size_t end = rData.find("!@#$!@#&!@#*LlL");
size_t start2 = rData.find("*LlL");
size_t end2 = rData.find(";");
cout << rData.substr(start2, end2 - start2) << ":" << rData.substr(start, end - start) << endl;
}
break;
}
rData = "";
}
}
} while (rLength > 0);
答案 0 :(得分:1)
这可以从我的代码中推断出来。当你打电话
rData.find("!@#$!@#&!@#*LlL");
...但它没有找到substring,那么变量start可以设置为随机值。 (在我的测试程序中,这是一个巨大的整数。)
然后,您尝试使用存储在start中的(未定义)值再次解析字符串。
我怀疑这就是你所看到的......一个“越界”的错误。另见this question。