void指针可能出现的转换问题

时间:2013-10-03 05:18:00

标签: c casting

我不清楚以下代码我做错了什么..正常编译时这是我收到的错误

  

blob.c:在函数'main'中:   blob.c:19:14:警告:解除引用'无效   *'指针[默认启用] blob.c:19:14:错误:在非结构或联合的内容中请求成员'x'

#include<stdio.h>
#include<stdlib.h>

typedef struct {

int*x;

}TIM;


main(){
    void*o;

    TIM * a;
    a=(TIM*)malloc(sizeof(TIM));
    a->x=(int*)malloc(sizeof(int));
    *(a->x)=10;
    o=(void*)a; 
    free((TIM*)o->x);

    free((TIM*)o);

}

有人可以指出我正确的方向。欢迎提示。如果提示看起来太明显,我会回答。

2 个答案:

答案 0 :(得分:2)

free((TIM*)o->x);

应该是

free(((TIM*)o)->x);

答案 1 :(得分:1)

您的陈述

free((TIM*)o->x);

失败,因为->的优先级高于强制转换,因为o被声明为void*,编译器不知道如何处理它。