[英]Implementing a semaphore in a struct, then use malloc() to initialize a struct, will there be futex errors?
这是我第一次询问堆栈溢出的问题,如果我做错了什么,请随时指出。 非常感谢!
在一个结构体中,有一个 sem_t 类型的变量sem 。
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声明为静态变量?init_myStruct()
,那么我们需要在释放结构体之前释放信号量sem 。 假设指向 myStruct 的指针在 main 中分配给s ,那么简单地执行free(&s->sem)
然后我们可以free(s)
是否正确? 提前致谢。信号量可以位于内存中的任何位置。 它在使用malloc()
分配的内存中没有问题,只要您在释放内存之前销毁信号量,如另一个问题的答案中所述。
您只能释放从malloc()
返回的同一指针。 由于您分配了整个结构,因此您也需要释放它。 所以main()
应该做free(s)
。 你不能做free(&s->sem)
因为&s->sem
不是malloc()
返回的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.