首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++危险指针实践?

c++危险指针实践?
EN

Stack Overflow用户
提问于 2013-11-11 19:59:46
回答 3查看 426关注 0票数 2
代码语言:javascript
复制
#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总是以这种方式打印到屏幕上吗?如果不是,为什么呢?

EN

回答 3

Stack Overflow用户

发布于 2013-11-11 20:01:26

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

票数 6
EN

Stack Overflow用户

发布于 2013-11-11 20:06:05

方式不安全,因为它的值可能是overwritten

  • Safe

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

会做得很好的。如果您的返回值很大,返回值优化无论如何都会救您一命。是否打印

  • 25?已指定实现。很可能不是因为当函数返回时,您正处于新的堆栈框架中。
票数 3
EN

Stack Overflow用户

发布于 2013-11-11 20:09:54

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

他防止这种情况的最好方法是在指针创建时立即初始化它。

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

代码语言:javascript
复制
if (pointer == 0) { 
   cout << "WARNING... cant use this pointer"; 
} 
else { 
   // it is okay to use this pointer 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19905817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档