2015-10-02 135 views
-1
#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)

+2

也許使用調試器將至少告訴發生這種情況的線路 –

+2

PS。相當大的結構放在堆棧上。把它們放在堆上。這可能會幫助 –

+0

'arr [i]'或'val'可以超過'500000'嗎? – NathanOliver

回答

0

應該有棧溢出。

考慮使用new[]來分配足夠的內存而不是過多的內存。

對於臨時修復,請在intlong long之前將static添加到三個非常大的陣列。

相關問題