gpt4 book ai didi

c++ - 访问 vector vector 元素时出现段错误

转载 作者:行者123 更新时间:2023-12-02 03:01:37 25 4
gpt4 key购买 nike

问题:我正在尝试初始化一个二维方形数组并找到其对角线之和的绝对差。我为此目的编写了以下代码。

#include<vector>
#include<iostream>

using namespace std;

vector<vector<int>> init() // function to initialize the array
{
int size;
cin>>size;
vector<vector<int>> vector(size);

for(int i = 0; i < size; ++i)
{
vector[i].resize(size);
for(int j = 0; j < size; ++j)
{
cin>>vector[i][j];
}
}


return vector;
}



int diagonal_diff(vector<vector<int>> vector)// function to find difference
{
int diff;

auto sum_1 = 0;
auto size = vector.size();
for(auto i = 0; i < size; ++i)
{
auto j = i;
sum_1 = vector[i][j] + sum_1;

}

int sum_2 = 0;
for(auto i = size -1; i >= 0; --i)
{
auto j = (size-1) - i;
sum_2 = vector[i][j] + sum_2;

}

diff = sum_1 - sum_2;
diff = (diff >= 0)? diff:diff*(-1);

return diff;
}

int main()
{
auto vector = init();//initialising array

for(auto i = 0; i < vector.size(); ++i)//printing the array
{
for(auto j = 0; j < vector.size(); ++j )
{
cout<< vector[i][j];
}
}

auto temp = diagonal_diff(vector);// calling difference function
cout<<temp<<endl;


return 0;

}

但是在打印数组后它给出了段错误。无法找出原因是什么。

我试图解决这个问题problem来自 hackerRank。如果我注释掉调用对角线_diff() 函数的行,那么代码运行正常。所以我认为错误出在diagonal_diff()函数中。

最佳答案

diagonal_diff内有以下循环:

int sum_2 = 0;
for (auto i = size - 1; i >= 0; --i)
{
auto j = (size-1) - i;
sum_2 = vector[i][j] + sum_2;
}

问题是 size 声明如下所示:

auto size = vector.size();

vector.size() 返回一个 size_t 对象类型,这意味着没有负值。

再次查看循环,并查看 i 声明:

auto i  = size - 1

因为 sizesize_t 类型,所以你的 i 也会自动变成 size_t 。现在,循环的停止条件是:i >= 0,这意味着在 isize_t 的情况下始终为 true >。当i等于0时,到达第三个循环的部分:--i,它得到的不是-1,而是最高的值size_t。然后你尝试执行: sum_2 = vector[i][j] + sum_2; 并收到异常。

要解决这个问题,只需将i声明更改为:int i = size - 1

注意:强烈不建议使用 vector 作为名称,尤其是当您在代码中使用 using namespace std; 时。 vector 是一个类名,它可能会导致代码冲突。您可以使用 vec 作为名称。

关于c++ - 访问 vector vector 元素时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52152884/

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