簡體   English   中英

為什么這個C程序在Windows上崩潰並且在linux上工作正常?

[英]Why is this C program crashes on windows and works fine on linux?

我寫了一個程序來查找諧波數

(第n個諧波數是前n個自然數倒數之和)

數字序列。 我的程序將其輸入作為命令行參數,並以表格格式打印諧波數。 作為一個例子這就是它的工作原理:

 C:\Users\EDDiE\c>har 10 30 5
      10 2.9289682539682538
      15 3.3182289932289937
      20 3.5977396571436819
      25 3.8159581777535068
      30 3.9949871309203906   

10( argv [1] )=起始編號,

30( argv [2] )=結束數字,

5( argv [3] )=前進的步驟。

我的Windows 8機器上,該程序 43429 崩潰

然后我在一個在線的c編譯器上執行它是一個linux環境(“我想”,我不是一個linux用戶)而且它工作正常。

這是我的計划:

har.c

#include <stdio.h>
#include <stdlib.h>

double harmonic(int);

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

    int j;
    int start = 1, end = 10, step = 1;

    switch(argc) {
    case 1:
        break;
    case 2:
        end = atoi(argv[1]);
        break;
    case 3:
        start = atoi(argv[1]);
        end = atoi(argv[2]);
        break;
    case 4:
        start = atoi(argv[1]);
        end = atoi(argv[2]);
        step = atoi(argv[3]);
        break;
    }

    for (j = start; j <= end; j += step)
        printf("%7d %3.20g\n", j, harmonic(j));

    return 0;
}


double harmonic(int n)
{
    //double H;
    if (n == 1 || n == 0)
        return 1.0;
    else
        return (1.0 / (double) n) + harmonic(n - 1);

    //return H;
}

我需要知道為什么這個程序在Windows環境下崩潰。

我需要在代碼中(或在我的系統中)修改任何內容嗎?

正如評論中已經說明的那樣,您最有可能遇到堆棧溢出。 雖然有希望,但您的遞歸可以輕松轉換為迭代,如下所示:

double harmonic(int n) {
  if(n == 0) return 1.0;
  double res = 0.0;
  while(n > 0) {
    res += (1.0 / (double) n);
    --n;
  }
  return res;
}

這樣你的程序將適用於大n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM