想象我有以下的C函数:由C函数返回指针阵列
double * cross_product(double vec1[3], double vec2[3])
{
double *outvec ;
*(outvec + 0)= vec1[1]*vec2[2] - vec1[2]*vec2[1];
*(outvec + 1)= vec1[2]*vec2[0] - vec1[0]*vec2[2];
*(outvec + 2)= vec1[0]*vec2[1] - vec1[1]*vec2[0];
return outvec ;
}
为什么程序在执行返回一个错误,而不是在编译阶段??
这其中也不起作用
double * cross_product_2(double vec1[3], double vec2[3])
{
double var ;
double *outvec = &var;
*(outvec + 0)= vec1[1]*vec2[2] - vec1[2]*vec2[1];
*(outvec + 1)= vec1[2]*vec2[0] - vec1[0]*vec2[2];
*(outvec + 2)= vec1[0]*vec2[1] - vec1[1]*vec2[0];
return outvec ;
// }
在第二个例子中,函数结束后,'var'超出了范围,并且返回的地址不再是有效的内存地址供您使用。还要注意在某个地方,你应该“释放”记忆。 – crashmstr 2014-09-12 19:00:12