#include <iostream>
using namespace std;
int main(int argc, char **argv) {
int a=5;
int *p,*q;
*p = a;
*q = *p; //line 6
cout<<*p<<p<<*q<<q;
return 0;
}
此程序挂起。似乎问题出在6号线上。为什么?
发布于 2012-07-28 01:09:00
是的,这些是悬空的指针,你会遇到未定义的行为。
不能取消引用指向不属于自己的内存的指针:
int* p;
*p; //illegal
int* x = NULL;
*x; //illegal
int* y = new int;
*y; //OK!
正确的版本应该是:
int main(int argc, char **argv) {
int a=5;
int *p = new int;
int *q = new int;
*p = a;
*q = *p; //line 6
cout<<*p<<p<<*q<<q;
delete p;
delete q;
return 0;
}
或
int main(int argc, char **argv) {
int a=5;
int *p;
int *q;
p = &a;
q = p; //line 6
cout<<*p<<p<<*q<<q;
return 0;
}
一个更正确的版本:
int main(int argc, char **argv) {
int a=5;
int p,q;
p = a;
q = p; //line 6
cout<<p<<p<<q<<q;
return 0;
}
无指针:)
发布于 2012-07-28 01:11:53
在第5行也有一个问题。你已经声明了指针,但是你没有让它们指向任何东西,这不会自动发生。而取消引用一个未初始化的指针,就像你所做的那样,很容易使你的程序崩溃。
像这样的东西会更好。
int main(int argc, char **argv) {
int a=5;
int b, c;
int *p,*q;
p = &b; // make p point at b
q = &c; // make q point at c
*p = a;
*q = *p; //line 6
cout<<*p<<p<<*q<<q;
return 0;
}
发布于 2012-07-28 01:12:36
你所拥有的代码假设有一些东西存储在p上,而实际上并没有。
这就是你想要做的吗?
int a=5;
int *p,*q;
p = &a;
q = p; //line 6
cout<<(*p)<<p<<(*q)<<q;
在上面的代码中,在程序的末尾,p和q指向相同的地址-存储整数a的地址
https://stackoverflow.com/questions/11692438
复制相似问题