2
#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 总是会以这种方式打印到屏幕上吗?如果不是那为什么?

4

3 回答 3

6

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

于 2013-11-11T12:01:26.127 回答
3
  • 不安全,因为它的值可能被覆盖

  • 安全方式:刚刚

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

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

  • 25印?指定实施。很可能不是因为函数返回时您在新的堆栈帧中。

于 2013-11-11T12:06:05.027 回答
0

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

他最好的保护方法是在创建指针后立即对其进行初始化。

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

if (pointer == 0) { 
   cout << "WARNING... cant use this pointer"; 
} 
else { 
   // it is okay to use this pointer 
} 
于 2013-11-11T12:09:53.660 回答