[英]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.