考虑以下因素:
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/