【发布时间】:2015-03-15 19:24:55
【问题描述】:
我有以下代码
#include <iostream>
#include <typeinfo>
using namespace std;
class myClass{
public:
myClass(){
cout<<"constructor called..."<<endl; }
};
int main(){
myClass ** p1;
myClass *p2[5];
*(p2+4) = new myClass;
*p1 = new myClass; // "constructor called..." printed, but segmentation fault
cout<<typeid(p1).name()<<endl;
// "PP7myClass" printed, after commenting out *p1 = new myClass;
// what is PP7?
cout<<typeid(2).name()<<endl;
// "A5_P7myClass" printed, after commenting out *p1 = new myClass;
// what is A5_P7?
if(typeid(p1)==typeid(p2)) cout<<"==="<<endl;
if(typeid(p1)==typeid(*p2)) cout<<"&&&"<<endl;
// I expected at least one of the above cout
// two lines should be printed, but nothing printed actually, why?
return 0;
}
- 为什么调用
p1的构造函数后会出现分段错误? - 如果注释掉
*p1 = new myClass;行,打印“PP7myClass”和“A5_P7myClass”,“PP7”和“A5_P7”是什么? - 如果我定义一个函数
void func(myClass a, myClass b){},然后执行func(p1, p2);,编译器会报错不能将myClass **转换为myClass,这意味着p1和p2都是输入myClass **,但是为什么return 0;上面的两行没有打印出来?
【问题讨论】:
-
*p1是一个未初始化的指针,你正在通过写入它来破坏随机内存。
标签: c++