2012-04-08 22 views
14

構造体へのポインタを関数に渡す際に問題があります。私のコードは基本的に以下に示すものです。メイン関数でmodify_itemを呼び出した後、stuff == NULLになります。私は、要素が5の項目構造体へのポインタになるようにしたい。何が間違っているの?構造体のポインタを関数に渡す

void modify_item(struct item *s){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    s = retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    modify_item(stuff); //After this call, stuff == NULL, why? 
} 

答えて

22

あなたは値によってポインタを渡しているので。この関数はポインタのコピーに対して動作し、元のものを変更することはありません。

ポインタへのポインタ(つまり、struct item **)を渡すか、ポインタを返すようにします。

17
void modify_item(struct item **s){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    *s = retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    modify_item(&stuff); 

または

struct item *modify_item(void){ 
    struct item *retVal = malloc(sizeof(struct item)); 
    retVal->element = 5; 
    return retVal; 
} 

int main(){ 
    struct item *stuff = NULL; 
    stuff = modify_item(); 
} 
関連する問題