c ++危险指针练习?

时间:2013-11-11 11:59:46

标签: c++ pointers

#include <stdio.h>


int *pPointer;

void SomeFunction()
{
    int nNumber;
    nNumber = 25;    

    // make pPointer point to nNumber:

    pPointer = &nNumber;
}

void main()
{
    SomeFunction(); // make pPointer point to something

    cout<< "Value of *pPointer: "<< *pPointer <<endl;
}

我被告知使用这样的指针是危险的,任何人都可以解释为什么它是危险的以及编写这段代码的“安全”方式是什么? 25会一直以这种方式打印到屏幕上吗?如果不是那么为什么?

3 个答案:

答案 0 :(得分:6)

使用指向变量范围之外的局部变量的指针总是很危险的。它调用未定义的行为。

答案 1 :(得分:3)

  • 不安全,因为其值可能会被覆盖

  • 安全的方式:只是

    int SomeFunction()
    {
        int nNumber;
        nNumber = 25;    
        return nNumber;
    }
    

    会好的。如果您的返回值很大,返回值优化将无论如何都会挽救您的生命。

  • 25打印?实施指定。很可能不是因为当函数返回时你处于一个新的堆栈框架中。

答案 2 :(得分:0)

你正在谈论被称为使用危险的野指针,因为指针是一个内存地址,而在现代计算机中,内存受到保护(只允许由拥有它的程序访问) 尝试读取或写入存储器地址0或NULL将导致程序因内存冲突错误而崩溃。

他最好的方法是保护这一点,以便在创建指针时立即执行。

另一种方法是在使用之前测试指针。

if (pointer == 0) { 
   cout << "WARNING... cant use this pointer"; 
} 
else { 
   // it is okay to use this pointer 
}