use*_*352 0 c++ debugging pointers g++ class
以下程序使用g ++编译,但在运行时崩溃:
class someClass
{
public:
int const mem;
someClass(int arg):mem(arg){}
};
int main()
{
int arg = 0;
someClass ob(arg);
float* sample;
*sample = (float)1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下程序不会崩溃:
int main()
{
float* sample;
*sample = (float)1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
float* sample;
*sample = (float)1;
Run Code Online (Sandbox Code Playgroud)
sample永远不会初始化为指向一个对象,所以当你取消引用它时,你的程序会崩溃.您需要在使用它之前对其进行初始化,例如:
float f;
float* sample = &f;
*sample = (float)1;
Run Code Online (Sandbox Code Playgroud)
你的第二个程序仍然是错误的,即使它没有崩溃.取消引用不指向有效对象的指针会导致未定义的行为.结果可能是您的程序崩溃,内存中的其他一些数据被覆盖,您的应用程序似乎继续正常运行,或任何其他结果.您的程序今天看起来运行正常,但明天运行时会崩溃.