为什么以下代码会引发分段错误?如果我删除行sem_post(sem)或free(malloc(65536)),则不会抛出segfault。另外,free(malloc(65536))究竟意味着什么?
谢谢!
#include <stdlib.h>
#include <memory.h>
#include <semaphore.h>
#include <pthread.h>
int
main()
{
sem_t *sem = (sem_t *)malloc(sizeof(sem_t));
sem_init(sem, 0, 0);
sem_post(sem);
sem_wait(sem);
sem_destroy(sem);
free(sem);
sem_post(sem);
free(malloc(65536));
return 0;
}
答案 0 :(得分:3)
您在sem_post(sem);
之后致电free(sem);
。 free
是一个释放程序正在使用的内存并将其返回给操作系统以便在另一个程序中使用的函数。在已释放的指针上调用任何函数是undefined behavior (UB)。
此外,一旦你在信号量上调用了sem_destroy
,它就不再是一个有效的信号量,除非你通过sem_init
重新初始化它,否则不应该这样使用。