0

1つの再帰関数を記述しましたが、整数へのポインターが引数として渡されます。その整数値は関数内でインクリメントされますが、ある値の後、その値が更新されないという奇妙な問題に直面しています。そのアドレスの値をチェックしています。

以下はコードです:-

   computeWait(long long int begin, long long int begin2, long long int w,
    int* current, int limit)      
   {    
      long long int next = 0, arrival = 0;

      long long int next1 = 0, service = 0;

      long long int serviceTime = 0;

      long long int wait = 0;

      static long long int Ta = 0;

      static long long int Ts = 0;
      static long long int W = 0;

      while(*current < limit)
      {
         next = (16807 * begin) % m;
         arrival = -200 * log((double)next/m);

         next1 = (16807 * begin2) % m;
         service = -100 * log(EDRN((double)next1));

         wait = max(0, (w + service - arrival));
         Ta = Ta + arrival; 
         Ts = Ts + service; 
         W = W + wait;

         *current = *current + 1;;
         computeWait(next, next1, wait, current, limit);
       }   

       printf("\n\nTotal arrival %Ld Total service %Ld Total wait %Ld\n", Ta/limit, Ts/limit, W/limit);
   }

   int main(int agrc, char* argv[])    
   {

       int num = 0;
       int currentValue = 0;        // seed number
       int end = 1000000;

       computeWait(1, 46831694, 0, &currentValue, end);          
   }

103917以降、その値は更新されず、メモリ保護に失敗します。

それを修正するのはとても些細なことのように思われるので、私がどこで何か間違ったことをしているのか教えてください。

ありがとう、ネハ。

4

1 に答える 1

3

コードを理解しようとはしませんでしたが、大きな数と再帰という言葉を目にしました。再帰が深すぎるため、スタックオーバーフローだと思いますか?

于 2013-02-09T00:40:43.033 に答える