【发布时间】:2008-12-29 22:18:10
【问题描述】:
我有一个结构
typedef struct my_s {
int x;
...
} my_T;
my_t * p_my_t;
我想将p_my_t 的地址设置为NULL,到目前为止,我尝试这样做:
memset (&p_my_t, 0, sizeof(my_t*))
不过,这对我来说并不合适。这样做的正确方法是什么?
修改问题 - 提出一个更复杂的问题:
这是我想要做的:
- 两个进程,A 和 B
- malloc p_my_t in A, B有N个线程,可以访问
- 开始在 A 中删除,但我不能简单地释放它,因为 B 中的线程可能仍在使用它。
- 所以我调用了一个函数,将 p_my_t 的地址传递给 B 以将其地址设置为 B 中的 NULL,这样 B 中的其他线程就不能再使用了
- 从 B 回调后,我在 A 中释放内存
注意:没有标准的方法可以通过进程之间的共享内存来管理内存分配。您将不得不对正在发生的事情做一些相当仔细的思考。
【问题讨论】:
-
你是想把p_my_t设置为NULL,还是想把p_my_t的地址设置为NULL?
-
设置p_my_t的地址为NULL
-
@dave:不能将 p_my_t 的地址设置为 NULL(p_my_t 是内存位置的名称);您可以将 p_my_t 的值设置为 NULL,因此它不会指向任何地方。
-
@dave:另外,你不应该使用 _t 作为变量名的后缀。将它用于类型并不是一个特别好的主意(POSIX 保留以 _t 结尾的类型名称以供实现使用),但是以 _t 结尾的变量会让人非常困惑。