【问题标题】:Debug error R6010调试错误 R6010
【发布时间】:2014-03-25 08:11:36
【问题描述】:

我已经在网上搜索过,但没有一个对我有帮助。这是导致错误的代码:已编辑以包含更多代码。给我 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);

【问题讨论】:

  • 你遇到了什么错误?
  • 调试错误 R6010 - abort() 已被调用
  • 嗯,所以这是,我从 R6 开始的错误消息中猜测...发生在 Visual Studio 中?你并没有给我们太多的背景信息。 rData 是什么? IN rData 是什么?是否有可能提出一个可以由其他人运行的小而完整的代码示例?
  • 这是发生在视觉工作室是的。我正在制作一个winsock 应用程序,rData 是所有接收到的数据。我将在我的主帖中包含完整的代码。
  • rData 以什么开头?如果它是一个空白字符串,那么如果你得到的第一个字节恰好匹配 nByte[0] (不管那是什么......)那么我真的认为万一'M'你跑完了单字节 rData ,试图访问 rData[4]。

标签: c++


【解决方案1】:

这是我从您的代码中推断出来的猜测。当你打电话时

rData.find("!@#$!@#&!@#*LlL"); 

...但它没有找到那个子字符串,那么变量 start 可以设置为一个随机值。 (在我的测试程序中,它是一个巨大的整数。)

然后您尝试使用存储在 start 中的(未定义)值再次解析字符串。

我怀疑这就是您所看到的……“越界”错误。另见this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    相关资源
    最近更新 更多