【发布时间】:2020-11-09 22:18:53
【问题描述】:
我无法编写一个必须使用梯形方法计算积分的 OpenMP 程序。
编译器对这些行尖叫:
x = calloc(n, sizeof(double));
y = calloc(n, sizeof(double));
错误 - “void *”类型的值不能分配给一个实体 输入“双 *”
我使用的是 Visual Studio 15,是的,我在属性中启用了 OpenMP 支持。
这是程序出现错误的部分:
#define N 4
double start_time, end_time, time;
float f(float x)
{
return(pow(x, 3));
}
void main() {
start_time = omp_get_wtime();
int i, n; double *x, *y;
double x0, xn, h, so, ans;
x0 = 0;
xn = 2;
h = 0.1;
n = (xn - x0) / h;
if (n % 2 == 1)
{
n = n + 1;
}
x = calloc(n, sizeof(double));
y = calloc(n, sizeof(double));
【问题讨论】:
-
那是 C,你应该使用 x = new double[n];在 C++ 程序中。如果它真的,真的需要零初始化(是吗?)那么你需要一个演员。并且有点担心二进制零也意味着 0.0。好吧,不要为此担心太多,C++ 编译器确实倾向于喜欢 IEEE 754-2008
-
std::vector可能更适合这里。它会自动为您管理内存。如果您发现自己需要vector中的数组,您可以使用data方法获得它。 -
注意:在 C++ 中,您的
main应该是int main()(而不是void)。
标签: c++