我正在尝试将PETSc 中的 Vec数组传递给一个函数,在内部对其进行修改并检索结果。伪代码如下:
PetscErrorCode foo(Vec *y, int n) {
// ...
ierr = VecDuplicateVecs(x, n, &y); CHKERRQ(ierr);
// ...
ierr = VecNorm(y[0],NORM_2,&norm); CHKERRQ(ierr); // this prints out fine
printf("norm = %f\n", norm);
}
int main(int argc,char **argv)
{
PetscErrorCode ierr;
PetscScalar norm;
Vec *y;
foo(y, 3);
ierr = VecNorm(y[0],NORM_2,&norm); CHKERRQ(ierr); // this breaks: segfault
ierr = VecDestroyVecs(3, &y); CHKERRQ(ierr);
return 0;
}
我确实收到了来自编译器的一条消息,指出variable "y" is used before its value is set
,但我看不到如何通过引用传递这些人。VecDuplicateVecs
必须在main中初始化吗?