C++ 危险指针练习

c++ dangerous pointers practice?

本文关键字:练习 指针 危险 C++      更新时间:2023-10-16
#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 会一直以这种方式打印到屏幕上吗?如果不是,那为什么?

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

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

  • 安全的方式:只是

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

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

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

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

他最好的保护方法是在指针创建后立即启动指针。

ANOUTHER 的方法是在使用之前测试指针。

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