繁体   English   中英

为什么我的指针会自动更改?

[英]Why do my pointer change itself automatically?

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的函数。

在main()中,我有

t **ppT = NULL;
test(ppT);
cout << ppT << " " << *ppT << endl;
cout << ppT << " " << *ppT << endl;

如果我在test中使用malloc,那么它将起作用。 但是,如果我在测试中使用new,它将显示给我

0049FCC8 0074C378
0049FCC8 CCCCCCCC

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

因为在test函数中,变量pT是局部变量,一旦函数返回,它将超出范围。 从函数返回后,通过&pT获得的指向它的指针将变为无效,并且尝试使用它将导致未定义的行为

那只是问题的一半 ,另一个是您将空指针传递给函数,然后在函数内部取消引用。 当模拟按引用传递(通过使用指向指针的指针所做的操作)时,需要在指针上使用address-of运算符,例如

t* pA = 0;
test(&pT);

这也将问题引入了范围,为什么您使用对指针的引用而不是简单地对指针的引用,例如

void test(t*& pT);
...
t* pT = nullptr;
test(pT);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM