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释放吗?