Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分配给数组时出现分段错误?HackerRank 2D阵列-DS_C++_Algorithm_Multidimensional Array_Data Structures_Stl - Fatal编程技术网

C++ 分配给数组时出现分段错误?HackerRank 2D阵列-DS

C++ 分配给数组时出现分段错误?HackerRank 2D阵列-DS,c++,algorithm,multidimensional-array,data-structures,stl,C++,Algorithm,Multidimensional Array,Data Structures,Stl,这是我试图在HackerRank上解决的问题: 这是我的职能机构: int hourglassSum(vector<vector<int>> arr) { vector <int> sum; for(int i=0, s=0, countI=0;countI<4&&s<16;i++){ //Sums hourglass values one column for(int j=0,count

这是我试图在HackerRank上解决的问题:

这是我的职能机构:

int hourglassSum(vector<vector<int>> arr) {
    vector <int> sum;

    for(int i=0, s=0, countI=0;countI<4&&s<16;i++){  //Sums hourglass values one column  
        for(int j=0,countJ=0;countJ<4;j++){          //at a time at each row into vector sum
            sum[s]+=arr[0+i][0+j];
            sum[s]+=arr[0+i][1+j];
            sum[s]+=arr[0+i][2+j];
            sum[s]+=arr[1+i][1+j];
            sum[s]+=arr[2+i][0+j];
            sum[s]+=arr[2+i][1+j];
            sum[s]+=arr[2+i][2+j];
            countJ++;
            s++;
        }
        countI++;
    }
    sort (sum.begin(), sum.end());

    return sum.back();
}
排序后(sum.begin(),sum.end())

返回sum.back();应该返回19吗?但我得到的是分段错误

错误代码如下:

 Reading symbols from Solution...done.
[New LWP 128917]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./Solution'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x0000000000400ea4 in hourglassSum (arr=...) at Solution.cpp:17
17              sum[s]+=arr[2+i][2+j];
To enable execution of this file add
    add-auto-load-safe-path /usr/local/lib64/libstdc++.so.6.0.25-gdb.py
line to your configuration file "//.gdbinit".
To completely disable this security protection add
    set auto-load safe-path /
line to your configuration file "//.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
    info "(gdb)Auto-loading safe path"

int类型的初始值向量为“0”。你很好,有这个概念。但是您没有声明向量的大小(初始值)

以下是声明向量的标准语法:

vector<type> variable_name (number_of_elements);
向量变量名称(元素数);
因此,您需要修改声明向量的行:

vector <int> sum(N); // N is the size of vector to be create
向量和(N);//N是要创建的向量的大小
发生此错误的原因是数组索引超出范围,导致缓冲区溢出、指针初始化错误等

当程序试图在分配给它的内存之外读取或写入或写入只能读取的内存时,就会生成一个信号

例如,您正在使用不支持数组负索引的语言访问[-1]

代码中出现的错误:

  • 您正在尝试写入内存位置(向量和) 没有草签的。因此,以16的恒定大小初始化向量。
  • 此外,没有为最大允许值添加任何条件 索引
    i
    j
    循环的2个
    中。
  • 请查看以下已在Hackerrank上接受状态的代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    // Complete the hourglassSum function below.
    int hourglassSum(vector<vector<int>> arr) {
        vector <int> sum(16);
    
        for(int i=0, s=0, countI=0;countI<4&&s<16;i++){  //Sums hourglass values one column  
            for(int j=0,countJ=0;countJ<4;j++){          //at a time at each row into vector sum
                if(i+2<6 && j+2<6){
                    sum[s]+=arr[0+i][0+j];
                    sum[s]+=arr[0+i][1+j];
                    sum[s]+=arr[0+i][2+j];
                    sum[s]+=arr[1+i][1+j];
                    sum[s]+=arr[2+i][0+j];
                    sum[s]+=arr[2+i][1+j];
                    sum[s]+=arr[2+i][2+j];
                    countJ++;
                    s++;
                }
            }
            countI++;
        }
        sort (sum.begin(), sum.end());
    
        return sum.back();
    }
    
    #包括
    使用名称空间std;
    //完成下面的hourglassum函数。
    整数hourglassSum(向量arr){
    向量和(16);
    
    对于(int i=0,s=0,countI=0;countII不建议使用Thank you@Deepak。我想你可以不限制i和j,因为countI和countJ已经检查了每行/列的检查数量。每行完成后,我会重新初始化为0,因此不会超过限制。一旦所有列完成,它就会退出。请看我的答案
    vector <int> sum(N); // N is the size of vector to be create
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    // Complete the hourglassSum function below.
    int hourglassSum(vector<vector<int>> arr) {
        vector <int> sum(16);
    
        for(int i=0, s=0, countI=0;countI<4&&s<16;i++){  //Sums hourglass values one column  
            for(int j=0,countJ=0;countJ<4;j++){          //at a time at each row into vector sum
                if(i+2<6 && j+2<6){
                    sum[s]+=arr[0+i][0+j];
                    sum[s]+=arr[0+i][1+j];
                    sum[s]+=arr[0+i][2+j];
                    sum[s]+=arr[1+i][1+j];
                    sum[s]+=arr[2+i][0+j];
                    sum[s]+=arr[2+i][1+j];
                    sum[s]+=arr[2+i][2+j];
                    countJ++;
                    s++;
                }
            }
            countI++;
        }
        sort (sum.begin(), sum.end());
    
        return sum.back();
    }