Meh*_*ran 1 c++ crash virtual pointers casting
#include <iostream>
class Base {
public:
virtual void print() = 0;
};
class Derived : public Base {
public:
void print() {
std::cout << "test\n";
}
};
Base* getBase (Derived* d) {
return (Base*) d;
}
int main()
{
Derived* d;
Base* b = getBase(d);
b->print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译(使用g ++)没有任何问题,但在运行后,它崩溃了!我尝试了不同类型的转换(如static_cast <>),但没有任何效果.
问题是什么?
Derived* d;
Run Code Online (Sandbox Code Playgroud)
这是一个指针,但你没有初始化它指向一个Derived对象,所以它有一个无效的值.使用它会产生不确定的行为; 最有可能的是,由于访问无效地址而导致崩溃.
尝试创建一个对象,然后使用指向它的指针:
Derived d;
Base * b = getBase(&d);
Run Code Online (Sandbox Code Playgroud)
请注意,转换为基类指针不需要邪恶的演员(甚至是不太邪恶的C++样式演员); 你可以这样做
Base * b = &d;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |