C指针数组范围和函数调用

juv*_*nis 2 c++ arrays scope

我有这种情况:

{
    float foo[10];
    for (int i = 0; i < 10; i++) {
         foo[i] = 1.0f;
    }
    object.function1(foo); // stores the float pointer to a const void* member of object
}
object.function2(); // uses the stored void pointer
Run Code Online (Sandbox Code Playgroud)

第二个函数调用中浮点指针的内容是否未知?当我运行程序时,似乎得到了奇怪的结果.但是如果我将float foo [10]声明为const并在声明中初始化它,我会得到正确的结果.为什么会这样?

Jar*_*Par 8

对于第一个问题,一旦超出范围使用foo是不正确的.我不确定它是否在规范中定义了行为,但这样做肯定是不正确的.最好的情况是你的程序会立即崩溃.

至于第二个问题,为什么让它成为常量?这是一个实现工件.可能发生的事情是数据被写入DLL的数据部分,因此在程序的生命周期内有效.相反,原始样本将数据放在堆栈中,它的生命周期要短得多.代码仍然是错误的,它恰好起作用.