[英]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.