为什么我的指针会自动改变
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,它可以工作。但是,如果我在test中使用new,它会显示
0049FCC8 0074C378
0049FCC8 CCCCCCCC
有什么问题吗?此外,我使用Visual Studio 2013作为我的编译器。
因为在test
函数中,变量pT
是局部的,一旦函数返回,它将超出作用域。一旦你从函数返回,你用&pT
得到的指向它的指针将变得无效,并且试图使用它将导致未定义行为。
这只是问题的一半,另一个是你传递一个空指针给函数,并在函数内解引用它。当您模拟引用传递(通过使用指针指向指针所做的事情)时,您需要在指针上使用地址操作符,如
t* pA = 0;
test(&pT);
这也引出了一个问题:为什么要使用指针对指针的引用,而不是像
那样简单地使用指针对指针的引用?void test(t*& pT);
...
t* pT = nullptr;
test(pT);
相关文章:
- 为什么我的函数接受"std::string"进行排序不会改变它?
- C++:我的链表尾巴没有改变?我似乎无法让节点正确指向彼此?
- "top"值不会改变我推送或弹出堆栈的次数
- 为什么当我改变光源的位置时,光源不移动?
- 为什么我的函数不改变对象的属性
- 为什么我的Qt小部件的焦点被改变了?
- 我的c ++数组值不想改变,它输出无限循环
- 为什么我的变量在单独的线程中修改时没有改变?C++/boost
- cocos2d-x每次我需要精灵或只是改变它的纹理时,制作精灵的最佳做法是什么
- 应该很琐碎,为什么我不能改变我的向量的值
- 为什么我的矢量中的项目在 C++ 中的 for-each 循环期间不会改变?
- 当我改变他的背景时,我失去了按钮的功能
- 为什么从我的函数中删除"cout"会改变其结果?
- C++ 为什么我的文本数组在我用另一个文本数组覆盖后不会改变?
- 为什么我的循环范围不会改变元素?
- 我的对象在矢量中的地址改变了
- 在c++中调用time会改变我的结构体tm
- 我应该改变我的设计来防止动态强制转换吗?
- 为什么我的阵列没有改变?快速排序尝试
- 如何改变我的链表插入函数从O(N)到O(1)