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



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

double* noise(int* steps, ...)
//some code
std::array<double, *steps> NoiseOut;
//rest of code

正在由cppmnoise.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];,结果很理想,但这种方法导致了内存泄漏。

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

double* noise(int steps, ...)
std::array<double, steps> NoiseOut;

有人告诉我台阶不是一个固定的表达方式。我尝试了constexprconststatic的各种方法,但都没有成功。通常具有相同的错误CCD_ 5。此外,我将指针从cppnoice.cpp传递到noise.cpp的原因是,我在编译时读到了指针更容易使用的地方?这样也许我可以把它转换成一个常量表达式?可能是发烧的梦。

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

注意:我对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相同的方式提供了自己的垃圾收集。

最新更新