由于内存地址问题打印不同的结果?简单的C ++问题

时间:2019-07-14 10:24:46

标签: c++ printf cout memory-address

我是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,

0 个答案:

没有答案