问题标签 [dangling-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4555 浏览

c++ - 释放目标内存时设置为 NULL 的简单、高效的弱指针

是否有一个简单、高效的弱/保护指针?我需要多个指向同一个对象的指针,这些指针在删除对象时都自动设置为 NULL。有一个“主”指针始终用于删除对象,但可以有几个其他指针引用同一个对象。

以下是一些不太符合我需求的解决方案:

  • QPointer:我不是在开发 QT 应用程序;我不希望包含来自 QObject 的这个库/派生。
  • boost::weak_ptr访问已释放对象时抛出异常。对我的情况来说太贵了:测试弱指针应该是正常的;当弱指针不再有效时,我计划进行一些手动清理。 update :weak_ptr 可以在不抛出异常的情况下进行测试
  • 低开销弱指针:这与我正在寻找的非常接近,除了我不喜欢这样一个事实“这个方案只有在你不分配 2**sizeof(int) 次的情况下才能保证工作”同一个位置。”

为什么我需要这些弱/受保护的指针: 我有一个带有游戏对象列表的游戏。一些对象依赖于其他对象,例如与游戏实体关联的调试/统计对象。调试/状态对象显示有关游戏实体的有用信息,但它仅在游戏实体存在时才有意义。所以如果游戏实体被删除,调试/统计对象应该意识到这一点并删除自己。(另一个想法是跟踪导弹:它可能会搜索新目标,而不是自我删除。)

我希望将调试/统计逻辑与游戏实体分开。游戏实体不必知道附加了调试/统计对象。虽然我更喜欢弱/受保护的指针的答案,但我也欢迎以不同的方式来处理我的特定任务。我在想我可能必须实现一个游戏对象管理器来跟踪对象生命周期并使用句柄而不是指向内存地址的原始指针。

我正在用 C++ 开发。

0 投票
5 回答
536 浏览

c - C 中悬空指针和字符数组的问题

cmd1[0]打印出inside时出现问题main。我很确定这是一个悬空指针错误。我真的不知道如何修复它。

0 投票
4 回答
1368 浏览

c - 悬空指针,free() 后值更改的原因?

在下面的代码段中free(x),为什么会y变成0?

根据我的理解,被指向的堆中的内存x,并且仍然被指向的内存y,还没有分配给其他人,那么它怎么能变成0呢?

而且,我不认为是free(x)它把它改成了 0。

任何意见?

0 投票
5 回答
2104 浏览

c - 悬空指针和双重释放

经过一些痛苦的经历,我明白了悬空指针和双重释放的问题。我正在寻求适当的解决方案。

aStruct有许多字段,包括其他数组。

有没有什么办法可以优雅free_aStruct(X)free_aStruct(B)退出?

执行上述操作仅设置A = NULL何时free_aStruct(A);调用。B现在悬空。

如何避免/纠正这种情况?引用计数是唯一可行的解​​决方案吗?或者,是否有其他“防御性”方法来释放内存以防止free_aStruct(B);爆炸?

0 投票
4 回答
934 浏览

c++ - 编写函数来释放指针并将其分配为 NULL

我在最近的一次采访中被问到这个问题,基本上是编写一个函数来结合 free 和分配 null 的功能。我是这样回答的:

因此,在执行之后,ptr本地 tomain将在我从newdelete函数返回它时保存 null 值。如果我刚刚分配NULL了 newdelete 函数,则ptr本地 tonewdelete将被清空,而不是ptr本地 to main

我认为我的解决方案是正确的,面试官也接受了。然而,他期待着其他的答案。他坚持我不NULL从函数返回,但仍然达到预期的结果。

有没有办法做到这一点?我能想到的只是传递另一个参数,它是指向ptr本地指针的指针main,但我不明白为什么它比我所做的更好!

0 投票
5 回答
2892 浏览

c++ - 从 STL 容器中删除元素时是否调用析构函数?

假设我有两个容器存储指向相同对象的指针:

假设我通过以下方法从其中一个容器中删除一个对象:

CppReference 说这调用了对象的析构函数。这是否意味着指向对象的指针fooList是一个悬空指针?

我不想使用引用计数指针。如何处理这个问题?

0 投票
4 回答
11734 浏览

c++ - 悬空指针示例

在下面的代码中,为什么会s1.printVal导致悬空指针错误?不是s1对象,即它的指针,在它被销毁之前仍然可以访问吗?

来源

0 投票
9 回答
10856 浏览

c++ - C ++中的动态分配列表

我制作了一个可爱的通用(即模板)List类来处理 C++ 中的列表。原因是我发现这个std::list类对于日常使用来说非常难看,而且由于我经常使用列表,我需要一个新的。主要的改进是在我的课堂上,我可以用来[]从中获取物品。此外,还有待实施的是IComparer对事物进行分类的系统。

我正在使用这个ListOBJLoader,我的类加载 Wavefront .obj 文件并将它们转换为网格。OBJLoader包含指向以下“类型”的指针列表:3D 位置、3D 法线、uv 纹理坐标、顶点、面和网格。顶点列表中的对象必须链接到所有 3D 位置、3D 法线和 uv 纹理坐标列表中的某些对象。面链接到顶点,网格链接到面。所以它们都是相互关联的。

为了简单起见,让我们考虑一下,在某些情况下,只有两个指针列表:List<Person*>List<Place*>. Person类包含,除其他外,字段List<Place*> placesVisitedPlace类包含字段List<Person*> peopleThatVisited。所以我们有这样的结构:

现在我们有以下代码:

全部做完。当我们到达时会发生什么}?所有的 dtor 都被调用并且程序崩溃,因为它试图删除东西两次或更多次。

我的列表中的 dtor 如下所示:

哪里Elem是:

并且T是泛型List类型。

这让我们回到了这个问题:有什么方法可以安全地删除我的List课程?里面的元素可能是也可能不是指针,如果它们是指针,我希望能够在删除 myList时指定是要删除里面的元素还是只删除Elem它们周围的包装器。

智能指针可能是一个答案,但这意味着我不能有List<bubuType*>,而只有List<smart_pointer_to_bubuType>. 这可能没问题,但同样:声明 aList<bubuType*>不会导致错误或警告,并且在某些情况下智能指针会导致实现中的一些问题:例如,我可能想List<PSTR>为某些 WinAPI 返回声明 a。我认为让PSTR智能指针内部的那些将是一项丑陋的工作。因此,我认为我正在寻找的解决方案应该与List模板的释放系统有关。

有任何想法吗?

0 投票
7 回答
3569 浏览

c - C中的悬空指针

我用 C 语言编写了一个带有悬空指针的程序。

即使指针悬空,我的输出也为 100 。

我对上面的函数做了一个改动func1()。现在我在编译时分配值,而不是像上面的程序那样从标准输入中获取y值。z

我重新定义func1()如下:

现在输出是 200

有人可以解释一下上述两个输出的原因吗?

0 投票
7 回答
394 浏览

c++ - 在 C++ 中初始化指针是强制性的吗?

t在为 赋值之前,是否必须在以下代码中进行初始化t?代码是否正确?