我用C中包含的信号量在C中写了一小段代码,但我不能继续,因为在sem_getvalue行上我总是得到一个分段错误。有人能解释一下为什么吗? THX
编辑:我使用gcc -lpthread -lrt -l c编译
#include <semaphore.h>
#include <stdlib.h>
#define N 3
#define FILENAME "resource.txt"
#define SEM_PROC "/semname"
int main(){
FILE* f = fopen(FILENAME, "w");
sem_t* proc_semaphore = sem_open(SEM_PROC, O_CREAT, "0777", 0);
if (proc_semaphore == SEM_FAILED) {
printf("[FATAL ERROR] Could not open the named semaphore\n");
exit(1);
}
printf("Sem created\n");
int* current= malloc(sizeof(int)); *current = -N;
sem_getvalue(proc_semaphore, current);
printf("current value: %d\n:", *current);
答案 0 :(得分:0)
很难肯定地说出了什么问题,但我尝试了。
如果由于某种原因此函数无法为您分配内存,则malloc可以返回 NULL 。这可能会导致SEGFAULT。我建议用简单的 int 变量替换你的 int *:
function classDefine(){
var playerClass = document.getElementById('class').value;
var playerLevel = document.getElementById('level').value;
if (playerClass == "Barbarian" && playerLevel == "Level 1") {
document.getElementById("fort").value = 2;
document.getElementById("ref").value = 2;
document.getElementById("will").value = 2;
document.getElementById("baseAttackBonus").value = 2;
}
else if (playerClass == "Barbarian" && playerLevel == "Level 2"){
document.getElementById("fort").value = 5;
document.getElementById("ref").value = 5;
document.getElementById("will").value = 5;
document.getElementById("baseAttackBonus").value = 5;
}
}
我建议使用perror()函数而不是printf来处理错误句柄,因为它会打印带有错误详细信息的人类可读消息:
int current = -N;
sem_getvalue(sem,¤t);