繁体   English   中英

断言失败错误,C ++中的向量下标超出范围问题

[英]Assertion Failure Error, vector subscript out of range problem in C++

我的目的是将vec数组设置为intData数组。 我阅读了此问题并将其应用于我的代码。 在执行该过程之前,我调整了intData的大小。 在C#中,此intData = GetIntArrayFromByteArray(vec); 不会造成任何问题,但是对于C ++中的数组矢量,我感到困惑。 我说出我在哪里得到的错误作为评论。 我尝试调整大小,但是没有用。 有人能帮助我吗?

代码说明;

  • buf收到一条消息( 它不是空的,我从客户端收到消息

  • 我创建一个与buf大小相同的向量数组vec

  • GetIntArrayFromCharArray()将char向量数组转换为int数组向量。

      char buf[1550];//message gets here not empty vector<uint16_t> intData; //empty int vector //char buf ----> vecor<char> vec int n = sizeof(buf) / sizeof(buf[0]); vector<char> vec(buf, buf + n); intData.resize(vec.size());//here I resize /* irrelevant code piece runs here */ if (something == 1)// First fragment { intData = GetIntArrayFromCharArray(vec);//size out of range error here } 

这是GetIntArrayFromCharArray()的转换

vector<uint16_t> GetIntArrayFromCharArray(vector<char> arr)
{
    // If the number of bytes is not even, put a zero at the end
    if ((arr.size() % 2) == 1)
        arr.resize(arr.size()+1);
    arr.push_back(0);


    vector<uint16_t> intArray;

    for (int i = 0; i < arr.size(); i += 2)
        intArray.push_back((uint16_t)((arr[i] << 8) | arr[i + 1]));

    return intArray;
}
// If the number of bytes is not even, put a zero at the end
if ((arr.size() % 2) == 1)
    arr.resize(arr.size()+1);
arr.push_back(0);

哎呀!

这实际上是:

  • “如果字节数不是偶数,请在末尾加零”
  • “然后总是在结尾加上另一个零”

结果是您将总是具有奇数个元素。 当您尝试读取向量结尾之后的内容时,这会中断随后的循环。

我不认为你的意思是把那个push_back那里,或者你打算把它代替resize调用。


顺便提一句,正如Jarod所指出的那样, intData调整intData大小完全是浪费时间,因为您下一步要做的(据我们所知)是替换了整个向量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM