删除二维数组
Deleting 2-dimensional array
我在vector中存储了一个文本文件列表,并且希望在每次迭代时将文本文件的内容读入二维数组:
for(unsigned i=0; (i < files.size()); i++)
{
std::string file = dir + "/" +files[i];
double** training_vars = new double*;
training_vars = readFromFile(file);
delete[] &training_vars;
}
我让函数readFromFile
决定数组的大小并返回这个数组。
我遇到的问题是,每次运行时,我得到一个bad_alloc
错误。我也不能在main中设置二维数组的大小所以我不知道该怎么做才能正确地删除这个数组。有什么想法吗?
您的程序有未定义的行为,这一行无效:
delete[] &training_vars;
因为&training_vars
不是由new []
分配的(注意training_vars
只是一个指向双精度对象的指针,没有别的)。
你可能希望readFromFile
为你做分配,可能是通过返回一个智能指针,或者,更好的是,通过const引用传递一个vector<>
给它。
理想情况下,总是使用std::vector<>
并摆脱c风格的数组,它的设计是为了避免这种情况。
注意:
您的for
循环有不必要的括号,可以用for-range循环替换:
for(auto& file : files)
{
...
}
您确实必须至少用适当的"RAII"对象包装这个库并使用现代c++。像这样的东西会更适合你。
for ( auto file : files )
{
std::shared_ptr< double * > training_vars( readFromFile( file ) );
// ... the rest of your code that uses training_vars
}
如前所述,delete[] &training_vars;
可能会隔离故障。您正在传递名为training_vars的堆栈本地"指针到指针到双精度"的地址以删除。您需要的是包含在该局部变量中的地址。
相关文章:
- 将值从二维数组输出到文本文件
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- 尝试从动态分配的二维数组 C++ 中读取值时出现分段错误,并在尝试删除它时给出 munmap_chunk():
- 如何删除这种二维数组?
- 如何正确删除具有已知二维大小的二维数组
- 如何删除二维数组中的元素
- 正在删除模板化的C++二维数组
- 删除二维数组的矢量
- 二维数组被函数修改后如何删除
- 初始化和删除二维数组
- 删除C++中的二维数组
- 删除动态创建的二维数组时出现访问冲突消息
- 删除二维数组
- 如何从二维数组中删除