在struct中实现一个semaphore,然后用malloc()初始化一个struct,会不会出现futex错误?
Implementing a semaphore in a struct, then use malloc() to initialize a struct, will there be futex errors?
第一次问关于stack overflow的问题,有什么不对的地方欢迎指出。非常感谢!
在一个结构中,有一个 sem 类型的变量 sem_t。
struct myStruct
{
sem_t sem;
}myStruct;
在struct的初始化代码中,我是这样写的:
myStruct* init_myStruct()
{
myStruct* tmp = (myStruct*)malloc(sizeof(myStruct));
sem_init(&tmp->sem, 0, 1);
return tmp;
}
我的问题是:
-
init_myStruct()
是否正确执行?这会导致 futex 错误吗?是否需要将信号量 sem 声明为静态变量?
- 第二个问题来自here。假设我们在 main 中调用
init_myStruct()
,那么我们需要在释放结构之前释放信号量 sem。假设指向 myStruct 的指针在 main 中分配给 s,那么简单地执行 free(&s->sem)
然后我们可以 free(s)
是否正确?提前致谢。
信号量可以在内存中的任何地方。它在使用 malloc()
分配的内存中没有问题,只要您在释放内存之前销毁信号量,如其他问题的答案中所述。
您只能释放从 malloc()
返回的相同指针。由于您分配了整个结构,因此您也需要释放它。所以 main()
应该做 free(s)
。你不能做 free(&s->sem)
因为 &s->sem
不是 malloc()
.
返回的指针
第一次问关于stack overflow的问题,有什么不对的地方欢迎指出。非常感谢!
在一个结构中,有一个 sem 类型的变量 sem_t。
struct myStruct
{
sem_t sem;
}myStruct;
在struct的初始化代码中,我是这样写的:
myStruct* init_myStruct()
{
myStruct* tmp = (myStruct*)malloc(sizeof(myStruct));
sem_init(&tmp->sem, 0, 1);
return tmp;
}
我的问题是:
-
init_myStruct()
是否正确执行?这会导致 futex 错误吗?是否需要将信号量 sem 声明为静态变量? - 第二个问题来自here。假设我们在 main 中调用
init_myStruct()
,那么我们需要在释放结构之前释放信号量 sem。假设指向 myStruct 的指针在 main 中分配给 s,那么简单地执行free(&s->sem)
然后我们可以free(s)
是否正确?提前致谢。
信号量可以在内存中的任何地方。它在使用
malloc()
分配的内存中没有问题,只要您在释放内存之前销毁信号量,如其他问题的答案中所述。您只能释放从
返回的指针malloc()
返回的相同指针。由于您分配了整个结构,因此您也需要释放它。所以main()
应该做free(s)
。你不能做free(&s->sem)
因为&s->sem
不是malloc()
.