为什么我得到一个分割错误在这个代码

Why do I get a Segmentation fault in this code?

本文关键字:错误 分割 代码 一个 为什么      更新时间:2023-10-16
#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)

应该有堆栈溢出

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

对于临时修复,在intlong long之前添加static到三个非常大的数组。