簡體   English   中英

為什么我的 c 代碼從 VSCode 終端運行時崩潰,但從 gnome 終端運行時運行良好?

[英]Why does my c code crash when run from VSCode terminal, but runs fine when run from gnome terminal?

當我從 Visual Studio Code 終端運行可執行文件時,Memory 似乎用完了,然后我的電腦死機了。

但是當我從 gnome 終端運行它時一切都很好,我得到了所需的輸出。

我還不了解 c 或 gmp.h 庫。 如果某處存在錯誤或我遺漏了什么,我不會感到驚訝,即使我發布的代碼在不從 VSCode 運行時確實給了我正確的結果。

順便說一句,在我的電腦上運行 N 666666 確實需要大約 1 分 43 秒。

// problem from: https://www.reddit.com/r/dailyprogrammer/comments/jfcuz5/20201021_challenge_386_intermediate_partition/
#include "gmp.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define N 666666

mpz_t results[N + 1];

void segment(int n)
{
    if (n <= 1)
        return;
    if (mpz_cmp_ui(results[n - 1], 0) > 0)
        return;

    mpz_t result;
    mpz_t diff;
    mpz_init(result);
    mpz_init(diff);
    int i = 0;
    int seq = 1;
    int is_positive;

    while (n - seq >= 0)
    {
        segment(n - seq);
        is_positive = 1 - 2 * (i / 2 % 2);
        mpz_mul_si(diff, results[n - seq - 1], is_positive);
        mpz_add(result, result, diff);
        seq += (i % 2 > 0) ? i + 2 : (i + 2) / 2;
        i += 1;
        mpz_set_ui(diff, 0);
    }

    mpz_add_ui(results[n - 1], result, 0);
    mpz_clear(result);
    mpz_clear(diff);
    return;
}

int main(void)
{
    for (int i; i < N; i++)
    {
        mpz_init(results[i]);
    }
    mpz_set_ui(results[0], 1);
    mpz_set_ui(results[1], 1);

    for (int i; i <= N + 1; i++)
    {
        segment(i);
    }

    gmp_printf("Result: %Zd\n", results[N]);

    for (int i; i < N; i++)
    {
        mpz_clear(results[i]);
    }
}

代碼具有未定義的行為,因為for循環不會初始化i循環索引: for (int i; i < N; i++)此外,數組有N + 1元素,因此初始化循環應該再運行一步,並且段少循環一圈。

main() function修改為:

int main() {
    for (int i = 0; i < N + 1; i++) {
        mpz_init(results[i]);
    }
    mpz_set_ui(results[0], 1);
    mpz_set_ui(results[1], 1);

    for (int i = 0; i < N + 1; i++) {
        segment(i);
    }

    gmp_printf("Result: %Zd\n", results[N]);

    for (int i = 0; i < N + 1; i++) {
        mpz_clear(results[i]);
    }
    return 0;
}

暫無
暫無

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

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