读书人

关于指针赋值给指针的有关问题

发布时间: 2013-09-04 10:34:09 作者: rapoo

关于指针赋值给指针的问题
假如有
int a=10;
int* p,* q,* r;
r=new int; // 动态分配内存
p=r;
q=p;
p=&a; // 修改p
delete q;

请大牛们给鉴定下是否有错误,我自己写的一段代码出现类似的语句,能通过编译,但是运行时出现错误。

这里面r的这一块内存里存储的是通过new分配来的内存的地址吧,而"p=r;"是将前面分配来的内存的地址存储在p内存块里,还是将r那一块内存的地址存储在p内存块里?同样"q=p;"呢?是将p内存块里存储的东西复制到q内存块里,还是将p那一块内存的地址存储在q内存块里?这应该对下面修改p(“p=&a;")和释放q("delete q;")影响很大吧,错误是不是就出现在这里?
[解决办法]

引用:
Quote: 引用:

没看出这代码有什么问题
至于
"p=r;"是将前面分配来的内存的地址存储在p内存块里,还是将r那一块内存的地址存储在p内存块里?
当然是前者


同样"q=p;"呢?是将p内存块里存储的东西复制到q内存块里,还是将p那一块内存的地址存储在q内存块里?
是不是和"p=r;"是一样的,是将p内存块里存储的东西复制到q内存块里?


当然是一样的
你的问题应该出在后续的代码上,比如拿着q或r又去干了别的事
[解决办法]


int a=10;
int * p = NULL,*q = NULL,*r = NULL;
r=new int; // 动态分配内存
p=r; // r p 同是指向分配的堆空间
q=p; // r p q 三者同是指向分配的堆空间
p=&a; // p 指向 栈空间a的地址, r q 还是原来指向分配的堆空间
delete q; //释放了堆空间,r q 野指针, 所以要赋空值
r = NULL;
q = NULL;

读书人网 >C++

热点推荐