【问题标题】:Same pointers pointing to different values when called from different functions当从不同的函数调用时,相同的指针指向不同的值
【发布时间】:2022-06-30 16:52:18
【问题描述】:

我很困惑为什么在不同的函数中使用相同的指针得到不同的值。

func_A 的输出显示了正确的值及其指针。

func_B 的输出显示不同的值,但指针相同。

如果在func_Afunc_B 之间什么都不做,相同的指针如何指向不同的值?

#include <iostream>

int *values;

void func_A() {

    int vals[3];
    for (int i = 0; i < 3; i++)
        vals[i] = i;

    // Store the values in the global variable
    values = vals;

    // Print pointer/values, Good values are printed
    std::cout << values     << ": " << *(values)     << "\n";
    std::cout << values + 1 << ": " << *(values + 1) << "\n";
    std::cout << values + 2 << ": " << *(values + 2) <<  std::endl;
}

void func_B() {
    // Print pointer/values, Same pointers but Different values 
    std::cout << values     << ": " << *(values)     << "\n";
    std::cout << values + 1 << ": " << *(values + 1) << "\n";
    std::cout << values + 2 << ": " << *(values + 2) <<  std::endl;
}


int main() {
    
    func_A();
    func_B();

    return 0;
}

输出:

0x7ffe1de5b31c: 0
0x7ffe1de5b320: 1
0x7ffe1de5b324: 2
0x7ffe1de5b31c: 32766
0x7ffe1de5b320: 501592880
0x7ffe1de5b324: 32766

【问题讨论】:

  • func_A() 返回后指针指向无效对象。在那之后任何事情都可能发生。

标签: c++ pointers


【解决方案1】:

您发现Undefined behaviorundefined 行为:全局指针values 指向一个已退出作用域的变量。

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2012-12-17
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多