gpt4 book ai didi

c++ - 为什么程序因错误 exc_bad_access code=exc_i386_gpflt 而中断

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:31 24 4
gpt4 key购买 nike

我不明白,为什么我的程序因错误而中断 exc_bad_access code=exc_i386_gpflt在这一行 matrix[row].push_back(cell);

所以,我的代码:

#include <iostream>
#include <string>
#include <vector>

int calculate(int cell_1x1_price, int cell_1x2_price) {
if ((cell_1x1_price + cell_1x1_price) < cell_1x2_price) {
return cell_1x1_price + cell_1x1_price;
} else {
return cell_1x2_price;
}
}

int main() {

using std::cin;
using std::cout;
using std::string;
using std::vector;

int rows;
int columns;
int cell_1x2_price;
int cell_1x1_price;

cin >> rows >> columns >> cell_1x2_price >> cell_1x1_price;

vector<string> matrix;
matrix.reserve(rows);

char cell;

for (int row = 0; row < rows; ++row) {
for (int column = 0; column < columns; ++column) {
cin >> cell;
matrix[row].push_back(cell);
}
}

int sum = 0;

for (int row = 0; row < rows; ++row) {
for (int column = 0; column < columns; ++column) {
if (matrix[row][column] == '*') {
if (column + 1 < columns && matrix[row][column + 1] == '*') {
sum += calculate(cell_1x1_price, cell_1x2_price);
++column;
continue;
}
if (row + 1 < rows && matrix[row + 1][column] == '*') {
matrix[row + 1][column] = '.';
sum += calculate(cell_1x1_price, cell_1x2_price);
continue;
}

sum += cell_1x1_price;
}
}
}

cout << sum;

return 0;
}

关于程序和输入的内容:第一个字符串包括4个整数:N、M、A、B(1≤N,M≤300,A,B≤1000)。下一行包括 M 符号。象征 。是干净的单元格,* 和 ** 是脏的。

如果 A 是 ** 单元格的总和,B 是 * 的总和,我需要找到要清洗的总和。

最佳答案

发生这种情况是因为您调用 matrix[row] 而 matrix 实际上是一个空 vector 。

调用 matrix.reserve(rows) 只会增加 vector 的容量,不会向其中添加任何元素。您可以为此使用 matrix.resize(rows) ,或者只是将大小传递给 vector 的构造函数,例如

vector<string> matrix(rows);

关于c++ - 为什么程序因错误 exc_bad_access code=exc_i386_gpflt 而中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com