每次调用程序时都会创建一个新缓冲区

时间:2011-03-15 14:11:57

标签: c++

我每次都需要创建一个新的缓冲区。 像这样的东西

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'可能未初始化

2 个答案:

答案 0 :(得分:2)

BufferSptr buf[bufcalc] (new Buffer (pMediaData->Size()));

这是不正确的:

  • 数组大小与C ++中的编译时常量绑定。
  • 使用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_arrayboost::shared_ptr