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以使分配工作的方式的症状.执行此任务的正确方法是什么?
*(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)