我得到了以下代码,这些代码可以完美编译,但是通过执行程序,它只会崩溃并关闭。我不知道为什么。

main{
...
  MLdouble *u = NULL;
  _intersect(...,u,...); //u as MLdouble* type
...
}

CurvatureCalc::_intersect(... MLdouble *u)
{
...
MLdouble test = 123.21
*u = test; //<---line where it crashes
}

我究竟做错了什么?我可能只是监督一些简单的事情。没有其他地方可以使用u。我已经尝试过的是使用u =&test的不同变体,例如,这显然也不起作用。提前致谢。

最佳答案

由于您使用C++进行编程,因此您真正应该做的是通过引用传递参数:

CurvatureCalc::_intersect(... MLdouble &u, ...)  // Note use of & instead of *
{
    ...
    u = ...;  // No dereference
    ...
}

并称为“正常”
MLdouble u;  // Not a pointer
_intersect(..., u, ...);

使用指针是模拟按引用传递的古老C方法,它不是通过传递作为指针的变量,而是通过将指针传递给变量来工作的。像这样:
MLdouble u;  // Not a pointer
_intersect(..., &u, ...);  // Note use of address-of operator & here

您现在正在做的事是取消引用空指针,这是不允许的。

10-08 13:45