我将文本文件列表存储在 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
错误。我也无法调整主函数内二维数组的大小,因此我有点不知道在这里要做什么才能正确删除数组。请问有什么想法吗?
最佳答案
您的程序有未定义的行为,此行无效:
delete[] &training_vars;
因为&training_vars
未由 new []
分配(请注意,training_vars
只是一个指向 double 的指针,仅此而已)。
您可能想要readFromFile
为您进行分配,可能通过返回智能指针,或者更好的是传递 vector<>
通过 const 引用它。
理想情况下,始终使用 std::vector<>
并摆脱 C 风格的数组,它的设计就是为了避免这样的情况。
注意:
您的for
循环有不必要的括号,可以用 for-range 循环替换:
for(auto& file : files)
{
...
}
关于c++ - 删除二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672111/