内存堆问题 C++,动态分配多维数组
Posted
技术标签:
【中文标题】内存堆问题 C++,动态分配多维数组【英文标题】:Memory heap issue C++ , with dynamically allocating multi-dimensional array 【发布时间】:2014-09-23 11:00:44 【问题描述】:我从以下 C++ 脚本中获取内存堆消息。如果我删除数组释放,错误就会消失。所以这个错误可能在代码的释放部分。我想不通
if(harmonic_type =='a')
double ** harmonic_content = new double *[number_of_harmonics_required_to_monitor]();
for (int i=0;i<number_of_harmonics_required_to_monitor+1;i++)
harmonic_content[i] = new double [2]();
harmonic_content = harmonic_detector(waveformdata,number_of_samples,samplingrate_Hz, fundamental_frequency_Hz, number_of_harmonics_required_to_monitor,harmonic_type);
for (int i=1;i<number_of_harmonics_required_to_monitor+1;i++)
cout<<" Harmonic order "<< i << "::::" << harmonic_content[i][0] << " Hz ::::"<<harmonic_content[i][1] << " :::: "<<harmonic_content[i][2]<<endl;
for (int i=0;i<number_of_harmonics_required_to_monitor+1;i++)
delete [] harmonic_content [i];
delete [] harmonic_content;
【问题讨论】:
【参考方案1】:在
new double *[number_of_harmonics_required_to_monitor]()
创建的元素总数:number_of_harmonics_required_to_monitor
在
for (int i=0;i<number_of_harmonics_required_to_monitor+1;i++)
写入的元素总数:number_of_harmonics_required_to_monitor+1
(从 0 到 number_of_harmonics_required_to_monitor
)
在
for (int i=1;i<number_of_harmonics_required_to_monitor+1;i++)
最后读取的元素不存在:它有索引number_of_harmonics_required_to_monitor+1
【讨论】:
【参考方案2】:您正在使用 c++。所以利用它的优势。
如果number_of_harmonics_required_to_monitor
是一个编译时间常数,那么你的整个代码可以缩小到:
#include <array>
//...
auto* harmonic_content = new std::array<std::array<double, number_of_harmonics_required_to_monitor>, number_of_harmonics_required_to_monitor>;
for (int i=1;i<number_of_harmonics_required_to_monitor+1;i++)
cout<<" Harmonic order "<< i << " :::: " << (*harmonic_content)[i][0] << "Hz"
<< " :::: " << (*harmonic_content)[i][1]
<< " :::: " << (*harmonic_content)[i][2]
<<endl;
delete harmonic_content;
如果它不是常数,你可以使用 sdt::vector。
更好的办法是使用一些矩阵实现来跟踪它自己的内存。
【讨论】:
以上是关于内存堆问题 C++,动态分配多维数组的主要内容,如果未能解决你的问题,请参考以下文章