我是C ++的新手,在我的代码中遇到了一个奇怪的问题。我以为它与内存地址堆栈有关,但我还不足以解决它/真正了解发生了什么。本质上,我在编译代码时会收到警告。然后,我还观察到一些奇怪的行为,其中打印的值与runnable
函数和main
函数中的值不同。如果有人知道发生了什么事情以及如何解决这种差异,将不胜感激。
编译警告
警告:与局部变量关联的堆栈存储器地址 'DATAPTS'返回了[-Wreturn-stack-address] 返回DATAPTS;
代码摘录
static float * runnable(char *im1, char *im2)
{
// ... SOME MATH ...
float DATAPTS[16] = { L1A.x, L1A.y, L1B.x, L1B.y, L2A.x, L2A.y, L2B.x, L2B.y, L3A.x, L3A.y, L3B.x, L3B.y, L4A.x, L4A.y, L4B.x, L4B.y };
for (int i = 16 - 1; i >= 0; i--)
cout << DATAPTS[i] << " , ";
cout << "\n";
return DATAPTS;
}
int main(int argc, char *argv[]) {
float * res;
res = runnable((char*)"VOLVIC LOGO.png",(char*)"IMG-0394.JPG");
for (int i = 16 - 1; i >= 0; i--)
cout << res[i] << " , ";
cout << "\n";
}
从可运行状态打印
1413.63,1754.15,2687.39,1758.69,2687.39,1758.69,2771.43,3581.81,2771.43,3581.81,1322.25,3700.2,1322.25,3700.2,1413.63,1754.15,
从主页面打印
1413.63,-1.32203e-28,1.4013e-45,5.98634e-34,1.4013e-45,5.97362e-34,4.59149e-41,-1.17931e + 24,1.4013e-45,5.98634e- 34,4.59163e-41,-1.32203e-28,1.4013e-45,5.97655e-34,4.59149e-41,-1.1793e + 24,