首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的指针会自动改变自己?

为什么我的指针会自动改变自己?
EN

Stack Overflow用户
提问于 2015-07-15 17:50:34
回答 1查看 119关注 0票数 1
代码语言:javascript
复制
struct t{
    int a;
    t(int i){
        a = i;
    }
};

void test(t**& ppT){
    t *pT = (t*)malloc(sizeof(t));
    pT->a = 100;//works

    t *pT = new t(100);//doesn't work

    ppT = &pT;
}

我有一个名为t的结构,还有一个名为test的函数。

在主()中,我有

代码语言:javascript
复制
t **ppT = NULL;
test(ppT);
cout << ppT << " " << *ppT << endl;
cout << ppT << " " << *ppT << endl;

如果我在测试中使用malloc,它就能工作。但是,如果我在测试中使用了新的,它将显示给我。

代码语言:javascript
复制
0049FCC8 0074C378
0049FCC8 CCCCCCCC

有什么问题吗?此外,我使用Visual 2013作为我的编译器。

EN

回答 1

Stack Overflow用户

发布于 2015-07-15 17:53:28

因为在test函数中,变量pT是本地的,一旦函数返回,变量pT就会超出作用域。当从函数返回时,使用&pT获得的指向它的指针将变得无效,尝试使用它将导致未定义的行为。

这只是问题的一半,另一个问题是,传递一个指向函数的空指针,并在函数中取消引用。当您模拟按引用传递(通过使用指向指针的指针所做的操作)时,您需要在指针上使用地址-of运算符,如

代码语言:javascript
复制
t* pA = 0;
test(&pT);

这也带来了为什么使用指针到指针的引用而不仅仅是对指针的引用的问题,例如

代码语言:javascript
复制
void test(t*& pT);
...
t* pT = nullptr;
test(pT);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31437566

复制
相关文章

相似问题

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