【问题标题】:C++ free(): invalid next size (fast)C++ free():下一个大小无效(快速)
【发布时间】:2017-03-28 21:23:50
【问题描述】:

我看过类似的问题(例如thisthisthis),但我仍然无法弄清楚。在一些测试用例中,我得到了错误并且无法理解它。我得到的错误是:

free(): invalid next size (fast)

我的代码使用机器人硬币收集算法。我的实现如下:

int collectTens( vector< vector<int> > grid ) {

vector<vector<int>> result(grid.size(), vector<int>(grid.size(), 0));
int rows = grid.size();
int cols = grid[0].size();

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        if (grid[i][j] % 10 != 0) {
            grid[i][j] = 0;
        }
    }
}

result[0][0] = grid[0][0];

for (int k = 1; k < cols; k++) {
    result[0][k] = result[0][k - 1] + grid[0][k];
}

for (int i = 1; i < rows; i++) {
    result[i][0] = result[i - 1][0] + grid[i][0];
    for (int j = 1; j < cols; j++) {
        result[i][j] = max(result[i - 1][j], result[i][j - 1]) + grid[i][j];
    }
}

cerr << result[rows - 1][cols - 1] << endl;

return result[rows - 1][cols - 1];
}

在发生错误的测试用例中,可以使用stderr输出结果,但由于错误而无法返回任何内容。哪个部分对我来说没有意义,因为它在 2D 向量中的位置相同。

【问题讨论】:

  • 使用内存调试器,如 valgrind 或其他人在您的平台上使用的任何东西。 (如果您希望我们提供帮助,您必须给我们足够的代码来重现错误。也许传递给 collectTens 的向量中的向量大小不一样。那会搞砸的。)
  • 好建议。我尝试使用 valgrind,但运行它时遇到问题。不过,弄清楚如何使用这些工具肯定会在未来有所帮助。

标签: c++


【解决方案1】:

线

vector<vector<int>> result(grid.size(), vector<int>(grid.size(), 0));

创建方形网格,而不是矩形网格。您可能打算使用:

vector<vector<int>> result(grid.size(), vector<int>(grid[0].size(), 0));
                                                        ^^^^

我建议使用:

int rows = grid.size();
int cols = grid[0].size();
vector<vector<int>> result(rows, vector<int>(cols, 0));

【讨论】:

  • 你说得对,这就是我忽略的。我一直认为错误出在我的算法中。谢谢!
猜你喜欢
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 2012-02-22
  • 2017-03-12
  • 2012-10-25
  • 2012-05-22
相关资源
最近更新 更多