vector和qsort配合问题定位总结

博客作者在使用VS2010开发小游戏时遇到一个Debug错误,涉及vector和qsort的配合。错误发生在尝试通过`v3.assign(v1[0].data.begin(), v1[0].data.end());`这行代码时,VS2010认为存在越界访问。作者发现问题可能出在qsort对vector的处理,尤其是元素交换过程中导致的指针互相引用问题。经过分析,作者推测这是因为qsort的浅拷贝导致vector内部指针混乱,而在VS2008下该问题未出现,可能是由于不同版本STL实现的差异。作者期望能有更深入的理解并寻求帮助。" 139163000,7144593,Python机器学习基础:模型评估与改进——交叉验证详解,"['机器学习', '模型评估与改进', '交叉验证', 'Python', 'scikit-learn']
摘要由CSDN通过智能技术生成

#include <vector>
#include <iostream>
using namespace std;

#pragma pack(1)
typedef struct  
{
int  key;
vector<int> data;
}Element;
#pragma pack()

int Cmp(const void *x, const void *y)
{
return ((Element*)y)->key - ((Element*)x)->key;
}

vector<Element> Sort( vector<Element> v )
{
qsort((void *)&v[0],v.size(),sizeof(Element),Cmp);
return v;
}
int main( )
{ 
vector<Element> v1;

vector<int> v2;
v2.push_back(1);
v2.push_back(2);

Element temp = {0};
temp.key = 1;
temp.data = v2;

v1.push_back(temp);

temp.key = 2;
v1.push_back(temp);

v1 = Sort(v1);
//temp = v1[0];
//v1[0] = v1[1];
//v1[1] = temp;

vector<int> v3;
v3.assign(v1[0].data.begin(),v1[0].data.end());

return 0;
}


在自己写一个小游戏的时候遇到了一个问题,源代码如上,经过了简化。

发现在vs2010里面运行如下代码的Debug版本,会提示

Debug Assertion Failed

Expression:vector ite

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值