问题标签 [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.
c++ - 当 std::vector 增长时,其中元素的地址不再有效?
假设我有以下内容:
我声明如下:
我现在有一个函数可以执行以下操作:
Foo
然后调用者将它通过引用获得的地址传递Foo*
给其他人。但是,我想知道的是,Foo
在触发向量增长后,这个指向的指针是否仍然有效vec
?如果复制其中的现有Foo
元素,vec
那么大概Foo*
漂浮的元素现在将悬空?是不是这样?我正在调试应用程序,但无法重现。
c++ - 为什么我没有得到一个悬空指针?
为什么我是以下代码的输出10
而不是错误?不是object2
悬空指针吗?
谢谢!
c++ - 访问已删除的内存块时如何避免错误?
如果标题不清楚,我有这个例子:
现在a
是 NULL 但b
不是。如果我访问b
,它将返回错误的值并可能使程序崩溃。
如何防止这种情况?
c - c:调试模糊内存泄漏的策略?
我正在用 c 开发一个项目,我试图了解如何调试一个使我的程序崩溃的晦涩错误。它有点大,通过制作较小版本的代码来隔离问题的尝试不起作用。所以我试图想出一种方法来调试和查明内存泄漏。
我想出了以下计划:我知道问题来自于运行某个函数,并且该函数递归调用自身。所以我想我可以对我的程序内存分配进行快照。因为我不知道杰克在幕后发生了什么(我知道一点不足以在这种情况下有用):
我的想法是在我的程序崩溃之前打印出我保存的内存记录的内容(由于 GDB,我知道它在哪里崩溃)。
然后在整个程序中(对于我的程序中的每个数据结构,我都有一个类似的推送功能,如上)我可以简单地添加一个带有统计数据结构分配加上总堆栈(堆?)内存分配的函数(我可以跟踪的)。只要我觉得需要记录我的程序运行的快照,我就会简单地制作更多的 memory_record 结构。问题是,如果我无法以某种方式记录实际使用了多少内存,则此内存资产负债表记录将无济于事。
但是我该怎么做呢?另外,我将如何考虑悬空指针和泄漏?我正在使用 OS X,目前正在查找如何记录堆栈指针和其他内容。
编辑:既然你问:valgrind的输出:(closure()是从main调用的函数,它返回错误的指针:它应该返回双向链表的头部,traversehashmap()是从closure()调用的函数我用来计算额外的节点并将其附加到链表中,并且它递归地调用自身,因为它需要在节点之间跳转。)
c++ - 在 std::unique_ptr 超出范围后仍可访问对象。不同的运行时行为
下面的代码将modify_entry
一个指向类型对象的指针传递给函数,Entry
并且在函数体内 aunique_ptr
采用原始指针。但是,指针指向的对象似乎在函数返回后仍然存在。
当我编译这段代码
和
clang 3.4 版 (tags/RELEASE_34/final)
目标:x86_64-apple-darwin13.1.0
线程模型:posix
它运行没有错误,输出是
约翰的构造函数
在 modify_entry() 内部
John Doe 的析构函数
从 modify_entry() 返回
约翰·多伊
但是,在这里,由于第 25 行,我收到了运行时错误。
Q:为什么运行clang生成的可执行文件没有运行时错误?
如果有人能澄清情况,我将不胜感激。请注意,我并没有尝试正确转让所有权。这个人为设计的错误代码示例是调试过程的副产品。make_unique
并为等移动语义unique_ptr
很棒,但这不是我要问的。
提前致谢。
c++ - unique_ptr悬空指针
C++ 代码:
这段代码后面是var
悬空指针吗?
c++ - 删除 C++ 中的悬空指针
在此代码之后 _var2 是Dangling pointer
.
我必须删除 _var2 ( delete _var2
) 吗?这是不可避免的吗?
c - 为什么悬空指针不能存储任何值,为什么它会抛出 0?
为什么悬空指针不能存储任何值,为什么它会抛出 0?因为它指向被释放的相同内存。如果我们尝试存储一些值,为什么为 0?
c++ - 这个异步技巧会起作用还是当我访问它时状态会悬空?
我面临一种情况,std::async
完全异步启动操作会很好。
问题是如果我不保存未来,该功能将在最后阻塞。我希望这不会发生。
这将阻止在std::future
函数作用域的末尾调用其析构函数:
这可能行得通吗?当我不将结果保存在变量中时会发生什么?