问题标签 [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 - 重新分配失败后自由悬空对象警告
我正在完成用于安全字符串检索的函数,并决定打开编译器警告,看看我的任何代码是否引发了任何标志。
目前,我在 Pelles C IDE 上收到以下编译器警告:
这是我的功能(如果您想在阅读代码之前完整阅读问题,请阅读下文):
我想明白为什么我被警告str
可能悬而未决。str
如果发生错误,我将释放所指向的分配空间,但是我的函数str
在被释放后没有进一步的调用。作为修复,我只是尝试free(str)
做str = 0x00
. 那不应该使指针str
不再悬空吗?它与我的tmp
指针有关吗?我没有释放或设置tmp
为任何一个,因为如果失败0x00
它应该已经是。但是我是否应该将其设置为成功,因为它在技术上仍然准确地指出了哪里需要和不再需要?0x00
realloc
0x00
str
简而言之:
- 为什么我的编译器警告
str
可能悬空? - 如何删除警告?
- 我
tmp
是否正确处理了我的指针?
c++ - GCC 编译 C/C++ 的最强化的一组选项是什么?
哪组 GCC 选项可针对内存损坏漏洞(如缓冲区溢出和悬空指针)提供最佳保护?GCC 是否提供任何类型的 ROP 链缓解?是否存在性能问题或其他问题会阻止此 GCC 选项用于生产中的关键任务应用程序?
我正在查看Debian Hardening Guide和GCC Mudflap。以下是我正在考虑的配置:
可以对这组选项进行任何改进吗?假设是最新版本的 GCC,如果您知道即将推出的任何酷炫功能,请告诉我!
c - C中的埃拉托色尼筛算法
好的,所以我创建的这个函数使用 Eratosthenes 算法来计算所有素数 <= n。该函数在参数中存储素数和素数。
当函数退出时,素数应该指向一块动态分配的内存,其中包含所有素数<= num。 *count
将有素数的计数。
这是我的功能getPrimes
:
现在,这是预期的输出和我的输出。如您所见,我的getPrimes
功能中有问题,但我不确定是什么。
到目前为止,人们向我指出了以下 3 个问题:
- 错误的删除过程
if (sieve[multiple]) {
数组筛子索引有偏差 (*array) = sieve;
泄漏刚刚分配的内存,并让我们*array
指向一个在函数返回时不再存在的局部变量——你会得到一个悬空指针。if(sieve[i] != NULL)
应该使用 0,而不是 NULL,你没有指针数组。
但是,我不太确定如何解决已为我发现的悬空指针/内存问题。除此之外,我想知道我的代码中是否还有其他错误,因为我不太清楚为什么我的输出中的数字添加了 0...不要担心不同的输出样式,只是额外的数字. 谢谢你能帮我解决这个问题!
c++ - 如何避免将句柄返回到对象内部 - Item 28 Effective C++
Effective C++ 的第 28 条说avoid returning "handles" to object internals
。这个问题展示了如何通过考虑封装来设计你的代码来做到这一点,以避免意外暴露你的类的内部。
我的示例涉及一个数据数组,由于内存是我想避免使用的问题std::vector
(和 Boost 库)。
在这里使用数组是我的代码的一个非常简化的版本:
我知道使用const
withget_data()
并不安全。如果我使用的是向量,我可以像上面的示例问题一样复制它,但是由于我想避免这种情况,我想知道如何最好地设计我的类来避免这种潜在的危险情况?
c++ - 我们可以在 C 中返回字符串文字吗
此代码有效吗?
也就是说,从 C 函数返回“Hello World”。
str 会是一个悬空指针吗?
PS:上面的函数是从一些真实的代码中抽象出来的。我看到有人编写直接返回字符串文字的代码。
c++ - 什么是悬空指针?
我知道这是一个很常见的问题,但对我来说还是个新问题!
我不明白悬空指针的概念,正在谷歌搜索,并编写测试方法来找到一个。
我只是想知道这是一个悬空指针吗?因为我发现的任何例子都是返回一些东西,在这里我正在尝试类似的东西!
谢谢!
c - 这会导致悬空指针吗?
这样的函数会导致悬空指针吗?
c++ - C++ 悬空指针/深拷贝/浅拷贝混淆
我听说当我们将相同的地址分配给两个不同的指针时会出现悬空指针问题。这是由于两个指针都指向相同的内存位置,并且如果使用一个指针中的地址释放内存;它仍然可以从第二个指针访问(甚至可以从第一个指针访问,如果未设置为 null,我不讨论这种情况)。
在下面的代码中,我尝试了不同的场景,在这些场景中应该将相同的内存位置分配给不同的指针,但显然在每个场景中它都在分配新的内存。为什么会这样?在每种情况下,都会创建深层副本。
我还尝试了很多初始化指针的方案。但在每种情况下,它们似乎都有单独的内存地址,并且相应的数据成员也有不同的内存地址。
那么在这种情况下会出现悬空指针问题吗?或者我怎样才能在这里做一个浅拷贝?这个 c++ 标准/版本(写在下面)是这样的还是我错过了什么?
操作系统:Linux mint 15
g++ --version的输出:
c - 为什么我的悬空指针不会导致分段错误?
我的代码:
我创建了一个指针,然后将它指向分配的空间,最后我为它分配了 42。我认为它不应该工作,它应该导致分段错误,但它可以工作。所以为什么?
PS:我通常在 Linux 上用 Gcc 编译它
c++ - 悬空指针 - 请验证
有人可以验证并告诉我以下代码是否有效吗?我觉得第 160-162 行可能是错误的。
我有评论指出行号。
完整的代码取自这里C++ Binary Search tree
curr和chkr指向同一个位置。通过删除chkr , curr仍然可以访问相同的位置吗?或者这没关系,因为它们实际上都没有使用 new 语句分配任何内存。
代码确实有些狡猾。我觉得也有内存泄漏。我是一名在职专业人士,希望更新我的 C++ 基础知识。感谢您的任何帮助。