我在函数中分配了struct数组,但是不能用相同函数的值填充那些结构。
#include<sys/sem.h>
void setSemaphores(int N, struct sembuf **wait){
*wait = malloc(N * sizeof(struct sembuf));
wait[3]->sem_op = 99; //causes error: Segmentation fault (core dumped)
}
int main(int argc, char *argv[]) {
int N = 4;
struct sembuf *wait;
setSemaphores(N, &wait);
wait[3].sem_op = 99; //works fine
return 0;
}
答案 0 :(得分:2)
setSemaphores()
:
wait
是指向struct sembuf
类型的一个变量的指针,而不是指向它们的数组的指针
因此,wait[3]
是UB。你想要的是(*wait)[3].sem_op
。
另一个提示:
更改*wait = malloc(N * sizeof(struct sembuf));
到*wait = malloc(N * sizeof **wait);
。
这很容易避免在sizeof中使用错误的类型。