c++ - 我的 vector vector 是内存安全的吗?

标签 c++ audio

我正在开发一个类来读取 WAV 文件。该类应该为每个 channel (左/右)生成一个 vector , channel vector 在它们自己的 vector 中。

我在类中定义了加载方法:

std::vector<std::vector<double> >* wavloader::load() throw(load_failed)

因此返回指向这个 vector vector 的指针。

在类中,我为顶级 vector 分配了内存,然后为任意数量的 channel 创建了 vector ,如下所示:

std::vector<std::vector<double> >* audio_all_chans = new std::vector<std::vector<double> >;

std::vector<double> dummy_vector;

for(int chan_index = 0; chan_index<n_channels; chan_index++)
(*audio_all_chans).push_back(dummy_vector);

然后我遍历该文件,并用适当的样本填充每个 vector 。

虽然使用 new 分配了顶级“vector 的 vector ”,但我担心各个“ channel ” vector (使用 dummy_vector 生成)以某种方式在堆栈上分配。

当我离开类时,包含的 vector 是否会超出范围并可能被覆盖?

程序在没有任何警告的情况下编译,valgrind 对此非常满意,我仍然从返回的指针中获得正确的值,类 deleted,但我有点担心可能是阴险的事情!

最佳答案

我知道这很可怕,但你做的方式很好。一个好的经验法则是查看声明中 * 的数量,然后删除那么多项目。所以你有一个指向动态分配 vector 的指针。很好,你需要删除它。

里面呢?好吧,该 vector 保存了指向其他 vector 的指针,然后我们将负责摆脱它们,但由于您那里只有 vector ,它们将超出范围并被删除。

关于c++ - 我的 vector vector 是内存安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8204650/

相关文章:

构造函数中的 C++ 二维数据数组 - 何时初始化和删除?

ios - Swift Midi Soundbank没有播放

windows-phone-7 - WindowsPhone MediaElement

android - 带增益调整的 AudioRecord 不适用于三星设备

java - 如何使用Java xuggler合并视频中的两种不同音频

c++ - 未定义对类构造函数的引用,何时正确定义?

c++ - Notepad++、NppExec、CreateProcess() 失败,错误代码为 2,Windows 8.1

c++ - "Floating-point invalid operation"当输入 float 到 stringstream

c++ - 使用类型= smth。和模板化类型

java - 回声/延迟算法只会导致噪音/静电?