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的函数。
在主()中,我有
t **ppT = NULL;
test(ppT);
cout << ppT << " " << *ppT << endl;
cout << ppT << " " << *ppT << endl;如果我在测试中使用malloc,它就能工作。但是,如果我在测试中使用了新的,它将显示给我。
0049FCC8 0074C378
0049FCC8 CCCCCCCC有什么问题吗?此外,我使用Visual 2013作为我的编译器。
发布于 2015-07-15 17:53:28
因为在test函数中,变量pT是本地的,一旦函数返回,变量pT就会超出作用域。当从函数返回时,使用&pT获得的指向它的指针将变得无效,尝试使用它将导致未定义的行为。
这只是问题的一半,另一个问题是,传递一个指向函数的空指针,并在函数中取消引用。当您模拟按引用传递(通过使用指向指针的指针所做的操作)时,您需要在指针上使用地址-of运算符,如
t* pA = 0;
test(&pT);这也带来了为什么使用指针到指针的引用而不仅仅是对指针的引用的问题,例如
void test(t*& pT);
...
t* pT = nullptr;
test(pT);https://stackoverflow.com/questions/31437566
复制相似问题