c - 为什么这段代码会抛出段错误?

标签 c dynamic malloc semaphore free

为什么下面的代码会抛出段错误?如果我删除行 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/

相关文章:

iphone - 如何找到 malloc "double free"错误的原因?

c - 结构体指针 结构体指针

php - 创建动态下拉列表

ios - 如何追踪 "incorrect checksum for freed object"

jquery - 访问选项卡时网站无法重新加载的问题

PHP运行时类修改

C 字符串函数可以工作,但在多次调用 malloc 后会失败

c - 如何在 C 中用整数打印和填充 void * 数组

cs50 缩写 pset2 意外错误

c++ - Arduino:AT 命令——使用 Serial.read() 读取串行输出的最后一行