指针的赋值和内存访问
2012-05-08 21:16
507 查看
#include <iostream> using namespace std; //关于指针的赋值和内存访问 struct S{ int i; int *p; }; /************************************************************************/ /* 1. 指针可以被随意赋值,但是这样这个指针就毫无意义,这个指针指向未知内存, 对该指针指向内存的任何操作都会报错,所以正确的方法是通过&变量来赋值; 2. 对一个指针可以进行下标运算[],但是一定要注意访问是否越界,对于数组比较 容易判断,对于对象就要计算其偏移量是否已经超出了对象内存范围,若超出虽然 在代码行不会报错,但是在该代码所在函数结束的时候就会造成栈崩溃,编译报错*/ /************************************************************************/ int main(){ int a[]={1,2}; int *pa=a; pa[0]=10; pa[1]=20; //赋值没有问题,但是在函数结束的时候栈会崩溃,因为访问越界了 pa[2]=30; int b=0; int *pb=&b; //同样也是访问越界倒置函数结束时栈崩溃 pb[1]=10; int *pInt=(int *)0x1000; //可以向指针直接赋值,但是这样的指针毫无意义 cout << pInt << endl; pInt++; cout << pInt << endl; //因为pInt指向垃圾(未知)内存,所以会Access Violation //cout << *pInt << endl; S s; int *p=&s.i; p[0]=4; p[1]=3; //访问拒绝,相当于访问内存地址为3的内存内容 cout << *(s.p) << endl; //这样会函数结束时栈崩溃,因为访问超出了s对象内存范围 p[2]=2; s.p=p; s.p[1]=1; s.p[0]=2;//相当于向内存地址为1的内存写入2,所以访存拒绝 return 0; }
相关文章推荐
- 二维指针相互赋值 出现内存无法访问的解决方法
- C语言学习7-1:使用6级指针访问一个整数,使用隐式内存分配中转,约瑟夫环
- 堆分配的内存全局可以用(只要不delete,且指针赋值NULL)
- C++中使用内存映射文件存取struct,并用指针访问
- 直接内存访问指针
- c--》为指针数组分配内存并且赋值0-99
- linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问
- 【C++】使用局部变量赋值而非引用,导致内存多次释放的野指针问题
- opencv内存总结和访问图像中像素方法案例(指针方法)
- 汇编语言理解指针(指针就是汇编的间接寻址,其实就是一个简单方便的运算指令,计算完毕直接就赋值,不是从内存中去取值后赋值)
- 【C++】使用局部变量赋值而非引用,导致内存多次释放的野指针问题
- C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间
- 读书笔记:C++中利用智能指针和值型类防止内存非法访问
- C++中使用内存映射文件存取struct,并用指针访问
- 常量指针运用, 指针和数组名的赋值,以及各自的内存空间问题 浅谈 !
- 关于c++在内存布局意义下使用派生类指针访问基类
- 再谈“0xC0000005读取写入位置冲突”——正确使用指针访问内存
- JPDA 架构研究5 - Agent利用环境指针访问VM (内存管理篇)
- 内存字节对齐---对结构体非常重要。不能用memcpy简单的移动指针进行赋值
- 结构体指针为分配内存访问结构体成员错误