访问空指针问题
之前由于自己的粗心,声明了一个类的指针对象后,赋值为NULL,然后忘记分配内存给它就直接使用了。
class A
{
void test()
{
printf("test A");
}
};
void main()
{
A *a=NULL;
a->test();
}
我使用时就类似上面的才操作,test中没有对A的成员变量的访问,这样不会出现编译错误,调试也没问题。
我的实际的程序中调用的成员函数,它没有使用A的成员变量,但是有局部变量
我的问题就是这种情况下,时间久了会导致程序死掉吗?我没有在test中访问成员变量哦。
哪位大神帮我解答一下,谢谢
我都要哭了,都说是粗心了,麻烦大家帮我解答一下这个问题,别在纠结我和编译器的关系了,我也知道我对不起编译器。我只想弄明白为什么程序能正常运行,过了很久才死掉是不是很大可能性与这个有关。我有疑问是因为10L我说的那样,我在这个函数中并没有对成员变量做操作。
跟编译器没有关系,它的成员方法不占内存空间的,所以你可以直接去调用它(前提是你的ptr不能为野指针,否则会崩掉),但是如果你的空指针去调用一个有内存空间的数据成员的话,这个时候就会崩掉,一个空指针没有有权限去调用一个有内存大小的数据对象。
编译器编译后的成员函数的第一个参数是this指针,通过this指针引用数据成员及调用其它成员函数。
由于你调用的成员函数没有使用到类的数据成员,所以即使传入的this指针为空,运行也不会出错。
也就是说调用其它成员函数也会吗?我用的这个成员函数中虽然没有引用成员变量,但是调用了其它的成员函数,不过这个成员函数中也没有引用成员变量。我的程序为什么隔了那么久才死掉,让我很纳闷。
你调用的成员函数,都不会出问题,即使this为0也不会,因为不需要用到this来调用它,根据标准来说,这个应该是属于未定义行为的。