[英]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.