c++ - 删除二维数组

标签 c++ arrays

我将文本文件列表存储在 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/

相关文章:

c++ - 转换标准 :set<int> into jintArray

c++ - 如何将文件中的数据导入我的结构数组?

java - 从整数填充二进制数数组时遇到问题

c - 通过 Shaker 排序对数组的主对角线进行排序

perl - Tie::File 是否延迟加载文件?

javascript - 如何编写一个接受 2 个字符串的函数,并将它们添加到相应数组的开头

c++ - 对静态变量的赋值是函数的结果,该函数在内部更改了该静态变量

c++ - clGetDeviceIds 返回 -1

c++ - 离屏渲染到帧缓冲区

php - 基于 session 变量 php 运行 Correct Array 函数