如何在满足 constnt 表达式的同时将整数传递给指针,传递给 std::array<double, integer>?

How does one pass an integer, to a pointer, to an std::array<double, integer>, while satisfying a constnt expression?

我有一个函数 noise.cpp 目前的形式是,

double* noise(int* steps, ...)

//some code

std::array<double, *steps> NoiseOut;

//rest of code

正在被 cppnoise.cpp、

测试和访问
#include <random>
#include <cmath>
#include<stdio.h>
#include <iostream>
#include "noise.h"

main(){

    double* out;

    int steps = 8;
    int* ptr = &steps;

    out = noise(ptr, 1, 1000, 0.1, 1, 3);
    printf("TEST \n");
    std::cout << out[0];

}

有头文件,

extern double* noise(int*, double, double, double, double, double); 

之前我通过 Python 访问了 noise.cpp 函数,其中 NoiseOut 数组最初是 double* NoiseOut = new double[steps]; 并获得了理想的结果,但是这种方法导致了内存泄漏。

最初我尝试删除分配的内存。但是函数 returns NoiseOut,所以我不确定这是否可能?因此,我发现现代方法是使用 std::array,因为它带有某种形式的垃圾收集。如果我尝试这样做,

double* noise(int steps, ...)

std::array<double, steps> NoiseOut;

有人告诉我 steps 不是常量表达式。我尝试了 constexprconststatic 的所有方法,但都没有成功。通常有相同的错误error: ‘steps’ is not a constant expression。另外,我将指针从 cppnoise.cpp 传递到 noise.cpp 的原因是因为我在某处读到该指针更容易使用,稍后在编译时?这样也许我可以将它转换为常量表达式?大概是发烧的梦吧。

那么,我如何在程序中声明一个整数值,我将其传递给一个函数,该函数可在 std::array 中使用而不会导致该错误?

注意:我是 c++ 的新手,主要使用 SQL、Python、R 和 SageMath。

std::array 不适合这个,因为在代码 运行 之前你不知道你需要什么尺寸。 std::array编译时需要知道大小

使用 new 在 运行 时给出动态数组大小,这就是您之前可以使用它的原因。

如果您担心内存泄漏(或者实际上,一般而言),那么我建议改用 std::vector

#include <vector>
//...
std::vector<double> NoiseOut;
NoiseOut.reserve(*steps);

std::vector 应该允许您做大多数 std::array 或 C 数组允许您这样做的事情,尽管我建议阅读它的文档(上面链接)。请注意,std::vector 也以与 std::array 相同的方式提供了自己的各种垃圾收集。