#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;
}
Run Code Online (Sandbox Code Playgroud)
这个程序挂了.似乎问题出在第6行.为什么会这样?
是的,那些是悬空指针,你正在遇到未定义的行为.
您不能取消引用指向您不拥有的内存的指针:
int* p;
*p; //illegal
int* x = NULL;
*x; //illegal
int* y = new int;
*y; //OK!
Run Code Online (Sandbox Code Playgroud)
正确的版本是:
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;
}
Run Code Online (Sandbox Code Playgroud)
要么
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;
}
Run Code Online (Sandbox Code Playgroud)
一个更正确的版本:
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;
}
Run Code Online (Sandbox Code Playgroud)
没有指针:)
第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;
}
Run Code Online (Sandbox Code Playgroud)