gpt4 book ai didi

c++ - 什么可能导致在 C++ 中指针的另一端丢失对象?

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:57 25 4
gpt4 key购买 nike

编辑:我发现错误:我没有用大小初始化数组。问题可以关闭。


我有一个类V,还有一个类NN 的对象将具有指向类 V 的对象的指针数组(比如 V **vList)。所以,N 有一个像这样的函数V **getList();现在在其他类的某些功能或只是一个驱动程序功能中,如果我说 V **theList = (N)n.getList(); Q1:theList 将指向在数组的第一个元素?鉴于数组的大小已知,我可以使用索引 i 循环并说 V *oneV = *vList[i] 吗?如果我上面做的不对,请纠正我。


我一直在用debugger跟踪我程序运行的全过程,我发现在使用V *oneV = vList[i]之后,数组 vList 与创建它们时相同,但如果我按照指针指向它指向的位置,对象就消失了。我猜这可能是我遇到段错误或总线错误的原因。难道是这样吗?为什么我在指针的另一端“松开”了对象?我做错了什么?


是的,我正在做一项学校作业,这就是为什么我不想打印我的代码,我想自己完成它,但我需要帮助才能找到问题。我想我仍然需要对指针数组进行解释。谢谢

最佳答案

Q1 是对的。对于第二部分,V *oneV = vList[i] 将是正确的语法。在您的语法中,您又一次取消引用(将 V 类型的对象视为指向此类对象的指针),这显然会使您的代码崩溃。

编辑:由于您使用的是正确的语法,因此段错误的原因将取决于您对 V 类型对象的内存管理。如果您已经在函数中插入了在堆栈上创建的对象的地址(自动变量,不是通过 newmalloc)并试图在函数外部访问它们,那么指针将悬空,您的代码将崩溃。

关于c++ - 什么可能导致在 C++ 中指针的另一端丢失对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1824118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com