结构元素自由功能

时间:2016-04-04 21:29:54

标签: c segmentation-fault structure free

typedef struct //this is a some structure
{
    char *a,*b;
    float x;
}name;
void freeelem(void *x) //the function for element mem free
{
    free(((name*)x)->a);
    free(((name*)x)->b);
}
void* allocelem() // 
{
    void *aux;
    aux=malloc(sizeof(name));
    return aux;
}
int main()
{
    void *x=allocelem();
    ((name*)x)->a="fdasf";
    ((name*)x)->b="fafas";
    freeelem(x);
    return 0;
}

我不明白为什么这会给出seg错误。这是我访问结构的方式吗? .................................................. ..............................

1 个答案:

答案 0 :(得分:0)

freeelem函数中,您在free - 系列函数未获得的指针上调用malloc。这会导致未定义的行为。

要解决此问题,请删除free次来电;分配给malloc中的ab时使用main - 系列函数。

另外,malloc(sizeof(Date))应为malloc(sizeof(name)),并且free(x)结尾main(或freeelem的结尾)应该do_action( 'woocommerce_order_item_meta_start', $item_id, $item, $order );