问题标签 [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 - realloc() 悬空指针和未定义行为
当您释放内存时,指向该内存的指针会发生什么?它们会立即失效吗?如果它们后来再次生效会怎样?
当然,指针变为无效然后再次变为“有效”的通常情况是其他对象被分配到恰好是之前使用的内存中,如果您使用指针访问内存,那显然是未定义的行为。悬空指针内存几乎覆盖了第 1 课。
但是,如果内存对于相同的分配再次变得有效怎么办?只有一种标准方式可以做到这一点:realloc()
. 如果您有一个指向malloc()
offset 处的 'd 内存块中某处的指针> 1
,然后使用realloc()
将块缩小到小于您的偏移量,那么您的指针显然会变得无效。如果您再次使用realloc()
将块重新增长到至少覆盖悬空指针指向的对象类型,并且在两种情况下都没有realloc()
移动内存块,那么悬空指针是否再次有效?
这是一个极端情况,我真的不知道如何解释 C 或 C++ 标准来弄清楚。下面是一个显示它的程序。
c++ - 在调用隐式复制构造函数时理解悬空指针
我正在尝试演示悬空指针的概念,并在其上编写程序。
假设如果您将指针作为类变量并且您没有编写自己的复制构造函数,那么它可能会导致悬空指针的概念。
隐式复制构造函数对元素进行成员明智的复制(浅复制)。因此,如果一个对象超出范围,则会导致悬空指针问题。
那么我为演示悬空指针而编写的这个程序是否正确?当我在 ideone.com 上编译它时,它给出了运行时错误。
c - C释放检查不起作用
我写了一个方法来释放我的结构。现在我有一个问题。当我两次调用此方法时,它给了我一个错误。但是我确实检查了我的结构中是否有某些东西,所以我不知道它怎么可能给我错误。
我的结构:
我的免费方法:
额外方法:
给我一个错误的方法:
c++ - 临时对象的成员函数的左值引用返回是悬空引用吗?
有一堂课CBase
。
如果我声明一个左值引用和一个指针,
是kk
悬空引用还是pp
悬空指针?
我认为kk
并且pp
悬而未决。因为调用CBase()
无疑会创建一个临时对象,所以导数 ,CBase().Create()
也应该是。但是,Xcode(6.1 版)没有给出警告或错误消息。
谁能给出一些提示或告诉我 C++11 文档在哪里描述了这些行为?还是我错了?
c++ - 内存分配栈
在堆栈中,我们为函数main
调用堆栈帧保留了内存。main
当我们调用Add
函数时,内存保留在栈顶。在Add
函数堆栈帧中,a
和b
是本地指针,c
是一个整数,它计算总和然后我们返回引用。c
是Add
函数的局部变量。
现在,当Add
函数执行完成时,堆栈中的内存空间也被释放,所以当我们尝试在main
with 指针中访问这个地址时p
,我们试图访问的基本上是一个释放的空间。编译器发出警告,但为什么它仍然正确打印值 5?
答案可能是机器没有释放内存空间,因为它认为没有必要,因为没有更多的功能。但是如果我们编写另一个函数Hello
,那么它肯定应该Add
在调用堆栈中为函数释放空间,但程序仍然打印
是因为像在堆中一样,我们需要null
在释放它之后分配一个指针,否则我们仍然可以访问它?这里有类似的东西吗?
c++11 - 悬空指针和内存泄漏有什么区别?
我是 C++ 新手,想问一下下面的代码是否是悬空指针或内存泄漏的示例,因为它指向动态分配的数组之外:
c - 这怎么是一个悬空指针?
当我在此链接上找到代码时,我正在网上阅读有关悬空指针的信息:
我把它贴在这里:
这是一个悬空指针,哪个指针悬空?该代码对我来说似乎有效。它应该打印“i = 21”并返回。我没有看到任何悬空指针。
c++ - 为什么悬空指针给出了先前指向的变量的大小?
输出:
为什么*pB
即使在取消分配之后,大小也是 8?
c - SQLite SQLITE_STATIC 局部变量问题
我正在查看一些供应商代码,并且有这样的查询:
后来在查询被执行的道路上。问题是这个查询永远不会匹配,即使它应该匹配。
我认为问题在于sqlite3_bind_text
绑定了一个局部变量,而 SQLite 保留了指向原始局部变量的指针。因此,当它超出范围时,它可能已经被覆盖。修复似乎是SQLITE_TRANSIENT
改用。谁能证实我的想法?还是我不在基地?
另一个奇怪的问题是供应商永远无法复制它。运气?
c++ - 比较悬空指针是否合法?
比较悬空指针是否合法?
请注意两者如何p
和q
指向已经消失的对象。这合法吗?