问题描述
- C ++ CXX0030: 错误: 无法计算表达式的值
-
std::vector<VmbUchar_t> * v=NULL; v = new std::vector<VmbUchar_t>; v=( std::vector<VmbUchar_t> *)malloc(100); dateInfo di ; di.frameId=nFrameID;//nFrameID会自动+1 di.v=v; memcpy(di.v,&TransformedData,100);//&TransformedData 第三方获取 q.push(di); if(q.size()>4){ dateInfo vv =q.front(); std::cout<<vv.frameId<<"OTAD : "<<(*vv.v)[0]<<"n" ; free(vv.v); q.pop(); } } q是全局队列 定义在其他文件 std::queue<dateInfo> q; typedef struct
{
std::vector<VmbUchar_t> * v; VmbUint64_t frameId;
} dateInfo;
extern std::queue q;程序跑一段时间 就会报错 : [0] CXX0030: 错误: 无法计算表达式的值
如图看 frameid325~328的地址还在 但是内容已经没了 。 如何解决 在线等
解决方案
之前的数据全部正常 到 325的时候 报错了。 队列里面有5组数据 。 PUSH 进去的 最新的 是 frameId 329 (还是有数据的) ,之前的4个却空了。
解决方案二:
有人知道如何解决吗
解决方案三:
是不是有其他线程等在修改这个数据,注意加锁等
解决方案四:
感觉这代码有点危险,代码太少了,多放点出来
解决方案五:
主要问题是 队列里的值会自动被清空(队列里 放了 ID 和 VECTOR, 只有VECTOR会被清空)。 每次都是跑一段时间后 ,队列数据会清空好烦恼
解决方案六:
v = new std::vector;
这条语句是不是多余?
后面需要delete释放吗?
时间: 2024-09-20 07:41:24