我得到了以下代码,这些代码可以完美编译,但是通过执行程序,它只会崩溃并关闭。我不知道为什么。
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
您现在正在做的事是取消引用空指针,这是不允许的。