内存堆问题C++,具有动态分配多维数组的功能
Memory heap issue C++ , with dynamically allocating multi-dimensional array
我从下面的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;
}
在中
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
您正在使用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。
更好的方法是使用一些矩阵实现来跟踪自己的内存。
相关文章:
- 如何实现删除数组的功能?
- 借助功能将 2D 转换为 1D 数组
- 将 2D 数组传递给大小为变量的功能
- 为什么必须动态分配扩展数组才能使此功能正常工作C++
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 共享_ptr中多功能数组的类型是什么
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 如何正确填充并将动态数组发送到Delphi中C 中的功能
- 返回处理数组的INT功能
- exc_bad_access on for loop(数组功能指针)
- 如何将浮子数组阵列从Swift传递到C 功能
- 如何将搜索功能添加到数组中
- 可用于任何大小的数组的功能
- 在堆中创建功能指针的数组
- 使用指针在功能中的数组中添加/删除元素
- 创建一个C 模板功能,该功能将返回特定大小的std ::数组
- 二次代数建议数组等返回功能
- (C )创建可以从功能访问的动态全局数组/向量
- C 2D数组功能
- c++容器集+数组功能