c++ - 为什么在此代码中出现运行时错误SIGSEGV

标签 c++ segmentation-fault c++14

今天我在Codechef https://www.codechef.com/problems/CHPINTU上解决了问题,在这里我得到了运行时错误sigsegv,下面的代码是请帮助我。以下是C++代码

    while(t!=0){
        int n,m;
        cin>>n>>m;
        int f[n],p[n];

        for(int i=0;i<n;i++)
            cin>>f[i];
        for(int i=0;i<n;i++)
            cin>>p[i];

        int freq[m+1];
        bool avail[m+1];
        memset(avail,false,sizeof(avail));
        memset(freq,-1,sizeof(freq));

        for(int i=0;i<n;i++){
            freq[f[i]]+=p[i];
            avail[f[i]]=true;

        }
        int min = INT_MAX;
        for(int i=0;i<=m;i++){
            if(freq[i]<min && avail[i]==true){
                min=freq[i];
            }
        }
        cout<<min<<"\n";
        t--;
    }

最佳答案

cin>>n>>m;
int f[n],p[n];

数组的长度不能为变量。
您可以使用vectornew
vector<int> f(n);
//or
int *f = new int[n];
//remember to delete after new

在您的代码中发现的其他错误:
memset(freq,-1,sizeof(freq));
freq[f[i]]+=p[i];

freq [i]是类型i的总价。因此,应该将freq [i]初始化为0而不是-1。

您可以使用freq[i]==0来确定是否有这样的篮子。它节省了avail占用的内存。

关于c++ - 为什么在此代码中出现运行时错误SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60754837/

相关文章:

c++ - wxWidgets 程序在框架关闭时崩溃

c++:将任意数量的参数传递给另一个函数

c++ - Intel i5 处理器优于 ATI HD Radeon GPU?

ios - 分段故障 Swift 2 App

c - 尝试实现 Dijkstra,但存在毫无意义的段错误

opengl - glGenBuffers() 因段错误而崩溃。 (C++/GLFW/GLEW)

c++ - 从抽象类创建链

c++ - Emscripten 崩溃与 mappedGlobals.find(name) != mappedGlobals.end()

c++ - 有条件的平凡析构函数

c++ - std::this_thread::sleep_for(2s) 中的 s 是什么?