为什么下面的代码会抛出段错误?如果我删除行 sem_post(sem) 或 free(malloc(65536)) 则不会抛出段错误。另外, 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;
}
最佳答案
您正在调用sem_post(sem);
之后free(sem);
。 free
是一个函数,用于释放程序正在使用的内存并将其返回给操作系统以供另一个程序使用。在已释放的指针上调用任何函数是 undefined behavior (UB) .
此外,一旦您调用 sem_destroy
正如您所做的那样,在信号量上,它不再是有效的信号量,并且除非您通过 sem_init
重新初始化它,否则不应如此使用。 .
关于c - 为什么这段代码会抛出段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43550664/