c - std C 有没有办法告诉我是否可以安全地取消引用指针

标签 c debugging pointers exception

考虑以下因素:

int * i = malloc(sizeof(int));
free(i);

我现在处于这样一种情况:i 指向已释放的内存,但它也是非零的;这是 C 编程中的常见错误,有没有办法在我执行以下操作之前判断 i 仍然是有效指针:

*i++; //probable EXC_BAD_ACCESS crash

我知道完全不可能有100%可靠(无误报)的方法,除非你从来没有重用过内存;但大多数时候都有效的东西对于调试来说非常有用。

编辑

我并不是说你不应该将指针设置为 NULL,我只是想知道是否有一种可移植的(POSIXish)方法可以在没有灾难性影响的情况下查找地址,我只是对调试复杂的多线程问题感兴趣时不时就会出现。

最佳答案

要获得可用于调试的东西,您需要使用 valgrind 的 memcheck 工具。当访问发生时,您将看到无效读取或无效写入错误。

@Anthales 是对的,你需要在释放后立即将指针设置为 NULL。如果您有多个对指针的引用,则情况会变得更加复杂。在不了解您具体情况的情况下,我无法确切地说出如何执行此操作,但可能的解决方案可以为不同的结构提供一些允许它们请求对该内存而不是特定指针的引用。

关于c - std C 有没有办法告诉我是否可以安全地取消引用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218817/

相关文章:

java - Java中如何模拟指针类型的 Action ,还是Java是引用传递还是值传递?

typescript - 如何将 AWS CDK 合成器输出到终端/网络浏览器 [如果可能]

c++ - 无法在 visual studio 2017 (Native c++) 中禁用数据断点

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

android - 这个 DEFINed 常量的值是多少?

c - 尝试使用 POSIX 消息队列创建消息队列时权限被拒绝

c - 如何以编程方式创建证书签名请求 (CSR)?

c - CodeBlocks 中的 Free 函数非常慢

android - Log.d 和对性能的影响

C - 如何打印二维数组中指针[0][0]的值