2013-10-29 50 views
0

我已經寫了以下解決以下問題 「由於未排序號的列表,你可以發現它們之間的最小絕對差的數字?如果有多個對,它們全部找到。 「越來越堆損壞和程序崩潰

這裏是代碼

#include <map> 
#include <set> 
#include <list> 
#include <cmath> 
#include <ctime> 
#include <deque> 
#include <queue> 
#include <stack> 
#include <bitset> 
#include <cstdio> 
#include <limits> 
#include <vector> 
#include <cstdlib> 
#include <numeric> 
#include <sstream> 
#include <iostream> 
#include <algorithm> 
using namespace std; 

int* smallestDiff(vector<int> a,int &noOfPairs) 
{ 
    sort(a.begin(),a.end()); 
    int * arr = new int(a.size()* sizeof(int) *2); 
    bool bfoundDiff = false; 
    int smallestDiff =0; 
    int num1,num2; 
    for(size_t i=0;i<a.size()-1;i++) 
    { 
     num1 = a[i]; 
     num2 = a[i+1]; 

     int newDiff = num2-num1; 
     if(!bfoundDiff || newDiff < smallestDiff) 
     { 
      smallestDiff = newDiff; 
      arr[0] = num1; 
      arr[1]= num2; 
      noOfPairs = 1; 
      bfoundDiff = true; 
     } 
    } 

    for(size_t i=0;i<a.size()-1;i++) 
    { 
     num1 = a[i]; 
     num2 = a[i+1]; 
     int newDiff = num2-num1; 
     if(newDiff == smallestDiff && num1!=arr[0] && num2!=arr[1]) 
     { 
      arr[noOfPairs*2] = num1; 
      arr[noOfPairs*2 + 1] = num2; 
      ++noOfPairs; 
     } 
    } 
    return arr; 
} 
int main() { 

    int _a_size; 
    cin >> _a_size; 
    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n'); 
    vector<int> _a; 
    int _a_item; 
    for(int _a_i=0; _a_i<_a_size; _a_i++) { 
     cin >> _a_item; 
     _a.push_back(_a_item); 
    } 
    int noOfPairs=0; 
    int *result =smallestDiff(_a,noOfPairs); 
    int noOfelems = noOfPairs*2; 
    for(int i=0;i<noOfelems;++i) 
    { 
     cout<< *(result+i)<<" "; 
    } 
    return 0; 
} 

現在程序運行良好按照邏輯,但它崩潰時它會嘗試打印結果values.I看不出什麼毛病傳遞指針作爲返回類型。

難道你們在這裏看到的任何問題?

+0

什麼是你逝去的投入? – lolando

+0

5爲爲1 2 3 4 5 – anand

+1

項目和數字的號碼你怎麼知道的程序邏輯是好的,如果輸出崩潰?我懷疑它與聲明int *數組和使用內部的指針有關。切換到矢量似乎是最簡單和最好的解決方案。 – dornhege

回答

2

你在下面這行做了一個錯字:

int * arr = new int(a.size()* sizeof(int) *2); 

它應該是這樣的:

int * arr = new int[a.size()* sizeof(int) *2]; 

不是分配數組你分配一個整數,並與你初始化認爲必須是規模。

+2

'sizeof(int)'由'new []'處理。 – dornhege

+0

我怎麼能錯過:( – anand