2016-04-04 5 views
-1
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 faultを与えるのか分かりません。それが構造にアクセスする方法ですか? ................................................. ...............................構造体の自由な機能

答えて

0

freeelem関数では、freeを、 malloc - ファミリ機能。これにより未定義の動作が発生します。

これを修正するには、これらの電話番号を削除するか、freeコールを削除するか、 abmainを割り当てる場合は、malloc - ファミリ機能を使用してください。また

malloc(sizeof(Date))malloc(sizeof(name))であるべきであり、前年比はmainの端部(又はfreeelemの端部)にfree(x)べきです。

+0

もし私がmallocを使用できない場合は、 がすでに他の場所に割り当てられていて、それらを解放したいのですが?私はタイプと構造を知っています。 –

+0

@ ConstantinMariusManuel 'free'という仕組みは、あなたがmalloc'dしたものだけを解放できるということです。他のオプションはありません –

+0

tnx、私は文字列を読むためにstrdupを使用します、それは動作するはずです.. –

関連する問題