将指针设置为null后,通过指针访问函数

阿比拉什·阿南德

我不明白下面的代码如何产生给定的输出。

#include <iostream>
using namespace std;

class MyClass
{
   public: 
   void doSomething()
   { 
       cout<<"Inside doSomething"<<endl;  
   }
};

int main()
{   
    MyClass obj;
    MyClass *ptr=&obj;
    ptr->doSomething();
    ptr=NULL;
    ptr->doSomething();
}

输出


内部doSomething
内部doSomething

我用空指针执行了一个函数,它实际上调用了该函数。使用ptr的cout检索存储在ptr中的地址表明,在语句ptr = NULL之后,将ptr设置为0。但是它仍然调用doSomething()。里面到底发生了什么?

炸鱼

这是未定义的行为,并且绝对可能发生任何事情,包括看起来可行。这不可靠!!

在这种情况下,它不会崩溃,仅仅是因为该MyClass::doSomething()函数对其this指针没有执行任何操作(这可能是NULL,因此很可能导致崩溃)。

如果您给了MyClass一个成员,并尝试在中访问该成员,那么doSomething()我希望看到崩溃(segfault)

class MyClass
{
   int someNum;
   public: 
   void doSomething()
   { 
       cout<< "Inside doSomething: " << this->someNum <<endl;  
   }
};

(在Linux上对gcc 4.9.2的测试中,我确实确实看到了段错误。)


另外,请重新考虑您对不良做法using namespace std;和的使用endl

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

释放堆内存后,将指针设置为NULL

来自分类Dev

在函数中使用后将字符指针设置为 NULL

来自分类Dev

删除前将指针设置为NULL

来自分类Dev

将共享指针设置为NULL

来自分类Dev

通过其中之一删除对象时,C ++将所有指针设置为null

来自分类Dev

通过其中之一删除对象时,C ++将所有指针设置为null

来自分类Dev

如何将函数属性设置为函数指针?

来自分类Dev

将C函数指针设置为C#函数

来自分类Dev

如何将函数属性设置为函数指针?

来自分类Dev

我可以在C和C ++中可靠地将函数指针设置为NULL吗?

来自分类Dev

在C函数中将结构指针设置为NULL

来自分类Dev

通过指向char的指针将value设置为0

来自分类Dev

将所有结构指针成员设置为NULL

来自分类Dev

将指针设置为null是否分配了内存?

来自分类Dev

free()在C代码中收集垃圾值,即使释放后将指针设置为NULL,代码也无法正常工作

来自分类Dev

如何通过指针从函数访问类的成员?

来自分类Dev

从函数调用返回后指针为空

来自分类Dev

将函数定义为函数指针

来自分类Dev

带数组指针的for循环,将值设置为指针

来自分类Dev

将void指针的值设置为整数

来自分类Dev

将指针设置为int值

来自分类Dev

将void指针的值设置为整数

来自分类Dev

将指针变量设置为多个值

来自分类Dev

将指针设置为int值

来自分类Dev

为什么在将指针传递给函数后访问指向多维数组的指针会返回分段错误?

来自分类Dev

通过引用将指针传递给函数

来自分类Dev

通过指针将结构传递给函数

来自分类Dev

通过指针访问数组

来自分类Dev

通过指针访问结构