C void指针转换

Edw*_*ers 1 c free pointers casting sigabrt

typedef struct{
    void *val;
}struct_t;

void test(int val)
{
    struct_t *s = malloc(sizeof(struct_t));

    s->val = malloc(sizeof(int));

   *(int*)&s->val = val;

    free(s->val);
}
Run Code Online (Sandbox Code Playgroud)

free会产生一个sigabrt,但我认为这更像是我正在施放s-> val以使分配工作的方式的症状.执行此任务的正确方法是什么?

MK.*_*MK. 7

 *(int*)&s->val = val;
Run Code Online (Sandbox Code Playgroud)

说"在struct s中获取字段val的地址并将write"更改为"val".这使得s-> val指向存储在测试"val"的参数中的地址.你的意思是

*(int*)s->val = val;
Run Code Online (Sandbox Code Playgroud)