【问题标题】:error segmentation fault in dynamic array [closed]动态数组中的错误分段错误[关闭]
【发布时间】:2021-08-31 05:58:04
【问题描述】:

我正在解决this problem on dynamic array,其中输入的第一行包含两个以空格分隔的整数,n 是要创建的 arr 的大小,q 是查询的数量。 q 个后续行中的每一行都包含一个查询字符串queries[i]。它期望返回int[]:每个类型 2 查询的结果按照它们呈现的顺序。

我尝试如下尝试,我的代码对我来说似乎很好,但它给出了分段错误错误。请帮助我在概念上出错的地方。谢谢。

问题:声明n 空数组的二维数组arr。所有数组都是零索引的。 声明一个整数,最后一个答案,并将其初始化为zero

queries2 类型,以字符串数组的形式提供给您解析:

查询:1 x y

idx=((queries[i][1]^last_answer)%n);。 将整数 y 附加到 arr[idx]

查询:2 x y

idx=((queries[i][1]^last_answer)%n);。 分配 last_answer=arr[idx][queries[i][2]%(arr[idx].size())] 。 将 last_answer 的新值存储到 answers 数组中。

输入: 2 5

1 0 5

1 1 7

1 0 3

2 1 0

2 1 1

输出:

7

3

#include<iostream>
#include<vector>
using namespace std;
//The function is expected to return an INTEGER_ARRAY,fuction accepts parameter 1) INTEGER n & (2) 2D_INTEGER_ARRAY queries
vector<int> dynamicArray(int n, vector<vector<int>> queries) {
    vector<vector<int>>arr;
    vector<int>answer;
    int last_answer=0;
    int q=queries.size();
    for(int i=0;i<q;i++){
        if(queries[i][0]==1){
            int idx=((queries[i][1]^last_answer)%n);
            arr[idx].push_back(queries[i][2]);
        }
        else{
            int idx=((queries[i][1]^last_answer)%n);
            last_answer=arr[idx][queries[i][2]%(arr[idx].size())];
            answer.push_back(last_answer);
        }
    }
    return answer;
}
int main(){
    int n,q;
    vector<vector<int>>querie;
    cin>>n>>q;
    for(int i=0;i<q;i++){
        cin>>querie[i][0]>>querie[i][1]>>querie[i][2];
    }
    vector<int>result=dynamicArray(n,querie);
    for(size_t i=0;i<result.size();i++){
        cout<<result[i];
    }
}

【问题讨论】:

  • 请提供minimal reproducible example 输入和预期输出,并解释代码应该如何工作。您是否尝试过使用调试器?
  • arr 是一个空数组,访问任何索引都是越界的。您正确地将元素推送到答案和arr 的(不存在的)元素,但您从未向arr 添加元素
  • @alan 先生,是的先生,我尝试了很多调试,并且还添加了确切问题的链接
  • a minimal reproducible example 需要在问题内,而不是依赖外部链接
  • 您还应该包括您在使用调试器时获得的信息,例如导致崩溃的行和崩溃的原因。

标签: c++ arrays algorithm vector


【解决方案1】:

您正在访问vector 的元素而不分配它们。

resize() 用于分配元素。

#include<iostream>
#include<vector>
using namespace std;
//The function is expected to return an INTEGER_ARRAY,fuction accepts parameter 1) INTEGER n & (2) 2D_INTEGER_ARRAY queries
vector<int> dynamicArray(int n, vector<vector<int>> queries) {
    vector<vector<int>>arr;
    vector<int>answer;
    int last_answer=0;
    int q=queries.size();
    arr.resize(n); // *** allocate elements ***
    for(int i=0;i<q;i++){
        if(queries[i][0]==1){
            int idx=((queries[i][1]^last_answer)%n);
            arr[idx].push_back(queries[i][2]);
        }
        else{
            int idx=((queries[i][1]^last_answer)%n);
            last_answer=arr[idx][queries[i][2]%(arr[idx].size())];
            answer.push_back(last_answer);
        }
    }
    return answer;
}
int main(){
    int n,q;
    vector<vector<int>>querie;
    cin>>n>>q;
    querie.resize(q, vector<int>(3)); // *** allocate elements ***
    for(int i=0;i<q;i++){
        cin>>querie[i][0]>>querie[i][1]>>querie[i][2];
    }
    vector<int>result=dynamicArray(n,querie);
    for(size_t i=0;i<result.size();i++){
        cout<<result[i];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多