为什么我在此代码中出现Segmentation故障?

时间:2015-10-02 13:47:35

标签: c++ segmentation-fault

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stack>
#include <queue>
#include <utility>
#include <functional>
#include <cmath>
#include <climits>
using namespace std;

#define pb push_back
#define mp make_pair
#define ll long long 


int main (void)
{
    int i,j,k,n;
    int arr[500001];
    long long ans[500001];
    int val = INT_MIN;
    cin>>n;
    for ( i = 0; i < n; i++ )
    {
        cin>>arr[i];
        if (val < arr[i])
            val = arr[i];
    }
    long long count[500001];
    for ( i = 0; i < n; i++ )
        count[arr[i]]++;
    //int ans = INT_MIN;
    ans[0] = 0;
    ans[1] = count[1];
    for ( i = 2; i <= val; i++ )
    {
        ans[i] = max(ans[i-1],ans[i-2]+count[i]*i);
    }
    cout<<ans[val]<<"\n";
    return 0;
}

所以,我实现了这个简单的代码,在这里我声明了3个数组,并尝试根据我的问题稍微调整一下(这是一个单独的事情)。但是,一旦我启动此代码,我就会出现分段错误。我不知道为什么?为什么会这样?我试图通过调试器运行它,它在max函数中显示可能的错误。因此,我创建了自己的maxi函数,但它仍显示分段错误?

编辑:使用调试器时,它显示以下内容:

template <class _Tp, class _Compare>
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11
const _Tp&
max(const _Tp& __a, const _Tp& __b, _Compare __comp)
{
    return __comp(__a, __b) ? __b : __a;
}

Thread 1: EXC BAD_ACCESS (code=2, address=0x7fff5f276154)

1 个答案:

答案 0 :(得分:0)

应该有堆栈溢出。

考虑使用new[]分配足够而不是过多的内存。

要进行临时修复,请在staticint之前将long long添加到三个非常大的数组中。