【发布时间】:2019-02-15 13:00:35
【问题描述】:
我有一个指针,默认情况下它带有 NULL 然后它等待某个事件如果事件发生则获取一个值,稍后我将释放其他地方的指针,但即使在释放指针之后我没有将其设为NULL,所以它仍然继续引用相同的内存位置,我知道下一个malloc调用可能将该内存块分配给其他内存请求!
pointer_type *p = NULL;
while (process_get_wakeup(//some logic//)) {
while ((qelem = (void*)process_dequeue(//some logic//)) != NULL) {
p = (pointer_type *)qelem;
}
.
.
//goes into a loop of calls where free(p) is also done!
.
.
//Printing value of p as %p gives this : 0xFF00000000
编辑:我已经知道它不是我们应该怎么做的,我不能指望保留与现在可能用于其他东西相同的价值,但我想要什么要知道为什么我只能看到 p 的特定值!
这个值:0xFF00000000有什么特殊含义吗?
【问题讨论】:
-
不要对
malloc返回的指针值做任何假设。malloc可能返回的唯一“特殊”指针值是NULL。 -
@Jabberwocky 我真的承认你的观点,但是这个编译器的目的是什么让这个值“总是”在指针中,直到现在访问一个上下文外的内存,因为我没有明确地将其设为 NULL ?
-
我认为您应该阅读 C 教科书中有关动态内存分配和指针的章节。在
free(p)之后,p的值没有改变,但是p没有指向任何地方,或者说,它指向了一些不再属于你的记忆你不能再取消引用p。这就是 C 语言的工作原理。
标签: c pointers dangling-pointer