如果我在malloc'd结构中声明一个信号量并且我释放()结构,我还需要破坏信号量吗?

时间:2012-11-01 13:06:46

标签: c

与C编程有关。

假设我这样做:

struct myStruct
{
    pthread_mutex_t myMutex;
    sem_t mySemaphore;
};

`

我在malloc中调整了适当的大小并初始化了Semaphore:

myStruct *create_myStruct()
{
    myStruct *temp; 

    temp = (myStruct *) malloc(sizeof(myStruct));
    sema_init(&sema, 0, 0);
    pthread_mutex_init(&(temp->myMutex), NULL);
    return temp;
}

我是否还需要手动销毁信号量或只是免费拨打电话?

1 个答案:

答案 0 :(得分:4)

你需要销毁信号量的互斥锁,这需要在之前发生你释放内存。否则,您有资源泄漏,并且您的程序具有未定义的行为。

您应该在心理上区分对象和它们所代表的状态,以及另一方面存储对象的存储器。没有人知道另一个,并且都需要单独设置和拆除(并且以相反的顺序)。