【发布时间】:2018-09-22 19:58:47
【问题描述】:
我正在尝试更改 func() 中 ydot[] 的值,以便可以在我的 ode() 函数中使用它。但是,在我调用 func() 之后,我似乎无法再访问 ydot[]。我将 func() 作为名为 dydt 的函数指针传递给 ode()。这是我的两个功能:
void func(double t, double y[], double ydot[])
{
for(int i = 0; i < 18; i++){
ydot[i] = y[i]+1;
}
}
typedef void (*dydt_func)(double t, double y[ ], double ydot[ ]);
void ode(double y0[ ], double yend[ ], int len, double t0,
double t1, dydt_func dydt)
{
double ydot[len];
dydt = &func;
//This prints out all the value of ydot[] just fine
for (int i = 0; i < 18; i++){
cout << ydot[i] << ",";
}
dydt(t1, y0, ydot);
//This SHOULD print all the revised value of ydot[]
//But I get an error instead:
//Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
for (int i = 0; i < 18; i++){
cout << ydot[i] << ",";
}
};
在调用 dydt() 之前,我可以访问 ydot[]。我使用函数指针的方式有问题吗?或者我应该将 ydot[] 或其他东西的指针传递给 func() 吗?谢谢大家帮忙!
【问题讨论】:
-
由于 C++ 没有variable-length arrays,因此您的代码在技术上是无效的。
-
至于您的问题,请学习如何使用您的调试器来捕捉正在运行的崩溃,并在您的代码中定位它发生的时间和位置。
-
@Someprogrammerdude 当我进入第二个 for 循环试图打印出 ydot[i] 时,它显示 EXC_BAD_ACCESS。但是在调用 dydt() 之前如何才能成功打印出来呢?
-
顺便问一下,你所拥有的数组的实际大小会至少
18元素吗?没有人会更小吗?你如何调用ode函数?有什么论据?您可以尝试创建一个Minimal, Complete, and Verifiable Example 向我们展示吗? -
当您调用
ode时,len有什么价值?如果小于 18,则进入未定义行为领域。
标签: c++ arrays pointers function-pointers pass-by-reference