我每次都需要创建一个新的缓冲区。 像这样的东西
int bufcalc;
bufcalc++;
BufferSptr buf[bufcalc] (new Buffer (pMediaData->Size()) );
memcpy(buf[bufcalc]->GetData() ,pMediaData->GetData() , pMediaData->Size());
其中bufcalc是int类型并且每次都递增。
if(bufcalc>=2)
{
DecodeBufferData ( buf[bufcalc-1], decodeInfo );
}
我收到以下错误:
可变大小的对象'buf'可能未初始化
答案 0 :(得分:2)
BufferSptr buf[bufcalc] (new Buffer (pMediaData->Size()));
这是不正确的:
operator new[]
完成多次分配,并使用可以不带参数调用的构造函数。答案 1 :(得分:1)
尝试使用std::vector
代替数组。 std::vector
会根据需要进行扩展,并且可以使用像array这样的索引变量:
std::vector<Buffer *> buf;
buf.push_back(new Buffer(pMediaData->Size()));
memcpy(buf[bufcalc]->GetData() ,pMediaData->GetData() , pMediaData->Size());
std::vector
比数组更安全
另请参阅boost::shared_array
和boost::shared_ptr
。