2016-10-20 34 views
2

この質問はカップルの前に尋ねられましたが、問題は解決しませんでした。私はVisual Studioでスタックのサイズを増やすことはできません、私は高い入力を取得し、スタックオーバーフローを引き起こす再帰メソッドを使用しています。私はベクトルなど何かを使うことはできません。私が必要とするのは、Visual StudioのC++でスタックサイズを増やすことです。C++でスタックサイズを増やす

P.S.私はVisual Studioの設定からスタックリザーブサイズを増やしましたが、私の問題も解決しません。

void sorting:: MergeSort(int *theArray, int n) { 


    mergesort(theArray, 0, n - 1); 

} 
void sorting::mergesort(int *theArray, int first, int last) { 
    if (first < last) { 

     int mid = (first + last)/2; // index of midpoint 

     mergesort(theArray, first, mid); 

     mergesort(theArray, mid + 1, last); 

     // merge the two halves 
     merge(theArray, first, mid, last); 
    } 
} // end mergesort 
void sorting::merge(int* theArray, int first, int mid, int last) { 
    const int max_size = 500000; 
    int tempArray[max_size]; 
    int first1 = first;  // beginning of first subarray 
    int last1 = mid;  // end of first subarray 
    int first2 = mid + 1; // beginning of second subarray 
    int last2 = last;  // end of second subarray 
    int index = first1; // next available location in tempArray 

    for (; (first1 <= last1) && (first2 <= last2); ++index) { 
     if (theArray[first1] < theArray[first2]) { 
      tempArray[index] = theArray[first1]; 
      ++first1; 
     } 
     else { 
      tempArray[index] = theArray[first2]; 
      ++first2; 
     } 
    } 
    // finish off the first subarray, if necessary 
    for (; first1 <= last1; ++first1, ++index) 
     tempArray[index] = theArray[first1]; 

    // finish off the second subarray, if necessary 
    for (; first2 <= last2; ++first2, ++index) 
     tempArray[index] = theArray[first2]; 

    // copy the result back into the original array 
    for (index = first; index <= last; ++index) 
     theArray[index] = tempArray[index]; 
    delete[] tempArray; 
} // end merge 

そして私の主な機能です。

#include <iostream> 
    #include <ctime> 
    #include "sorting.h" 

    using namespace std; 



    int main() 
    { 
     sorting sort; 
     int size = 500000; 
     int *myArr=new int[size]; 

     for (int i = 0; i < size; i++) { 
      myArr[i] = rand() % size; 
     } 
     cout << clock()<<" "; 
     sort.MergeSort(myArr,size); 
     cout<<clock(); 
     cin.get(); 
    } 
+6

実際にはもっと大きなスタックが必要な場合よりも、アルゴリズムや実装にバグがある確率ははるかに高いです。 – abelenky

+0

アルゴリズムのバグではないかもしれません。時には回帰(たぶんほとんどの場合)は、あなたの問題を解決する最善の方法ではありません。アルゴリズムは何ですか? –

+0

@duDE私はそれを試して、それは動作しません。 –

答えて

3

私は問題を解決してきた、私は思うが、それは間違いのVisual Studioで働くすべてのIDEで動作するはずです。 PROJECT-> Properties-> Configuration Properties-> Linker-> System-> Stack Reserve Size = 4194304となります。これにより、スタックサイズは4 MBになります。

関連する問題