C++ 危险指针练习
c++ dangerous pointers practice?
#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
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 加速C++练习2.4
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- C++ 独特指针练习的向量
- 练习中出现空指针错误
- 练习程序在尝试学习指针时崩溃
- 指针练习改进
- C++ 危险指针练习
- 跳到C++第13章练习问题4-指针
- 很好的资源,练习c++数组和指针
- 练习:C++中的指针和引用
- C++指针练习
- 需要帮助理解指针练习的输出