首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从技术上讲,如何在strack跟踪中有一个空这个指针?

从技术上讲,如何在strack跟踪中有一个空这个指针?
EN

Stack Overflow用户
提问于 2015-11-10 09:41:21
回答 1查看 85关注 0票数 2

我有一个核心文件,应用程序崩溃在一个在NULL-pointer上调用的方法中:

代码语言:javascript
复制
class myclass{
    myclass_impl* impl;

    void func();
}

func(){impl->implFunc();}

应用程序崩溃,因为成员impl为NULL。但是,在myclass_impl::implFunc()中,串跟踪以*thisNULL结尾。

这怎么可能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 09:44:56

因为已知函数implFunc()的位置。它有一个地址,因此当我们查看调用堆栈时,我们知道我们在其中。

但是,用于调用该函数的this指针被设置为0 (或者实际上,一些未定义但未分配的值--取决于它的使用方式)。

您可以想到一些成员方法,比如将一个隐式第一个参数作为this值的函数(实际上,在许多平台上都是exactly what happens )。不需要指针才能调用函数。调用至少会到达函数,从而将函数的位置放置在调用堆栈上(这是用来生成回退跟踪的),而函数内部发生的事情取决于是否取消引用该指针。

因此,您的场景意味着调用该函数时,隐式第一个参数是一个NULL指针。函数调用本身成功,但是函数(方法)中使用的指针失败了,因为您取消了一个空指针。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33626945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档