- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个指针,默认情况下它携带 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
编辑:我已经知道这不是我们应该怎么做,我不能期望保留与现在可能用于其他东西相同的值(value),但我想要的要知道的是为什么我只能看到 p 的特定值!
这个值:0xFF00000000 是否有任何特殊含义?
最佳答案
相反 - 指针不在释放
后保留其值。
C 标准规定,一旦对象空闲
,或者更一般地说,它的生命周期结束,指向该对象的所有指针的值就会变得不确定 ,并且使用这样一个不确定的值可能会导致未定义的行为,即使它只是打印该值。它碰巧看起来好像保留了原来的值(value),这并不能保证。
这允许 C 编译器在您的函数内进行优化。例如,如果它使用一个 CPU 寄存器 来保留 p
的值,在 free(p)
调用之后,编译器知道寄存器现在可以用于其他用途,例如存储其他操作的中间计算结果,并且在为其分配新值之前不需要存储其值。
至于两个不同对象的内存地址是否相同——如果它们不同时处于事件状态,那是有可能的。单个对象将在其整个生命周期内拥有一个不变的地址。未指定其生命周期后发生的情况。 malloc
通常作为空闲 block 列表来实现,最近的空闲
block 很可能首先被重用。
关于c - 了解这种情况下的悬挂指针行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52268868/
我试图使用 2 个文件描述符让父级向子级发送信息,并让子级将其发回。 #include #include #include #define READ 0 #define WRITE 1 int
我需要摆脱警告,其中之一是 -Wdangling-else。它在以下宏定义中记录了一个悬空 if: #define FOR_EACH_REF(var, container) \ if(bool
我使用eclipse进行php开发。我最近遇到了一个问题,IDE 会挂起,并且每当我打开 eclipse 时就会立即返回挂起状态。它说它卡在“初始化Java工具”上。我重新安装了多个版本的java和e
我想使用队列来保存结果,因为我希望消费者(串行而不是并行)在工作人员产生结果时处理工作人员的结果。 现在,我想知道为什么以下程序挂起。 import multiprocessing as mp imp
我是 ruby/rails 的新手,过去 2 天一直被一个问题搞得头晕目眩,希望这个论坛上的人能帮助我解决这个问题。 我正在使用 Rails 4 并使用 Passenger + Nginx 和 M
在堆上释放内存后 - vector 中仍保留(悬空)指针。如何完全删除 vector 元素? vector obstacles; vector actions; void Game::free(Ga
在编译器构造中,主要的歧义问题之一是dangling else。正如 Aho、Lam、Sethi 和 Ullman 在《编译器:原理、技术和工具》一书中提到的,悬空 else 的语法不能与 LL(1)
细节: ? Workspace name (e.g., org name) swag
我是一名优秀的程序员,十分优秀!