繁体   English   中英

C++ 程序编译没有问题但不运行

[英]C++ program compiled without problems but doesn't run

有我的代码。 它确实编译没有任何错误,但它没有 output 任何东西。 当我打开 program.exe 时,即使我在程序末尾添加“cin.get()”,它也会立即关闭。 在终端中使用时,它不会计算任何东西。 回声$? 返回一个假值。 我还有其他类似的程序(用于测试 OpenMP),它们也已编译但按预期工作。 gcc 一定有某种问题。 有任何想法吗?

#include <iostream>
#include <string>
#include <iomanip>
#include <omp.h>
#include <cstdio> 
using namespace std;

const long num_steps = 300'000'000;

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

    cout << setprecision(15) << fixed;
    const unsigned num_threads = stoi(argv[1]);
    int i, nthreads;
    long double pi, sum[num_threads];
    long double step = 1.0 / num_steps;
    omp_set_num_threads(num_threads);
    #pragma omp parallel
    {
        int i, id, nthrds;
        long double x;
        id = omp_get_thread_num();
        nthrds = omp_get_num_threads();
        if (id == 0) nthreads = nthrds;
        for (i = id, sum[id] = 0.0; i < num_steps; i += nthrds)
        {
            x = (i + 0.5) * step;
            sum[id] += 4.0 / (1.0 + x * x);
        }
    }
    for (i = 0, pi = 0.0; i < nthreads; ++i) pi += step * sum[i];
    cout << "PI = " << pi << endl;
    cout << "PI = "
         << "3.14159265358979323846264338327950288419716939937510582097494" << endl;

}

这是我的任务。json:

"version": "2.0.0",
    "tasks": [
      {
        "label": "program01",
        "type": "shell",
        "command": "g++",
        "args": ["-std=c++2a", "-fopenmp", "-Wall", "-o", "program", "main.cpp"],
        "group": {
          "kind": "build",
          "isDefault": true
        },
        "problemMatcher": []

问题出在这里: long double pi, sum[num_threads]; num_threads必须是编译时常量,但不是,因为您在运行时获取它的值。

如果您想在运行时获取它的值,请创建一个动态数组,如下所示:

int i, nthreads;
long double pi;
long double* sum = new long double[num_threads];

然后执行myProgram.exe 8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM