想象我有以下的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