2014-02-10 134 views
-4

我有關於下面的程序問題: 它打印:我應該怎麼做才能修復這個程序?

dst->在主= -528993792

F1 = 6

dst.val VAL欲解決這個程序,以便將打印在

dst.val主要= 6

我該怎麼做?

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

typedef struct my_struct myStruct; 
struct my_struct 
{ 
    int val; 
}; 

myStruct *f2(void) 
{ 
    myStruct *dst = malloc(sizeof(myStruct)); 
    dst->val = 6; 
    return dst; 
} 



void f1(myStruct *dst) 
{ 
    dst = f2(); 
    printf("**dst->val in f1=%d\n", dst->val); 
} 


int main() 
{ 
    myStruct dst; 
    f1(&dst); 
    printf("**dst.val in main=%d\n", dst.val); 
} 
+0

如果你可以改變自動分配對象的地址,也就是說,你不用強制'malloc()'的返回值。 – 2014-02-10 22:05:55

+0

看起來像一個家庭作業... – thang

回答

0
void f1(myStruct *dst){ 
    myStruct *p = f2(); 
    printf("**dst->val in f1=%d\n", p->val); 
         //dst is the address that was copied on the stack. 
    dst->val = p->val;//There is no meaning If you do not change the contents. 
    free(p); 
} 
+0

[添加解釋](http://meta.stackexchange.com/q/148272/237804)? – anatolyg

+0

@anatolyg你需要解釋嗎? – BLUEPIXY

+0

不,我並不需要它(也許其他人) – anatolyg

0

按價值返回您的結構;不使用指針和動態分配:

myStruct f2(void) 
{ 
    myStruct dst; 
    dst.val = 6; 
    return dst; 
} 

然後f1將使用通通過指針的概念更傳統:

void f1(myStruct *dst) 
{ 
    *dst = f2(); 
    printf("**dst->val in f1=%d\n", dst->val); 
} 

(實際上,我不知道這是否就是所謂的「pass- by-pointer「或」pass-by-reference「;大概後者是正確的)

相關問題