2012-08-11 80 views
-2

我遇到了一個很奇怪的問題。 我定義了一個結構並將其作爲一個const指針傳遞給一個函數。代碼就像下面那樣。當使用結構指針作爲函數參數時出現錯誤值

typedef struct a{ 
    char str1[256]; 
    ... 
    int x; 
}a_t; 

int f(..., const a_t *a){...} 

a_t a; 
... 
a.x = 1; 
f(..., &a); 
... 

問題是一旦它進入f(),我會打印出變量a-> x,它總是0!?? 但是,如果我將結構成員x移動到結構的頂部(在其他成員之前),它將是1,這是正確的。

是否有任何使用結構指針作爲參數的技巧或陷阱?

[EDIT1該printf的被稱爲函數f()一號線

+6

顯示你放什麼'F'功能,你很可能溢出'str1'成員。 – ouah 2012-08-11 09:29:31

+4

請嘗試創建[SSCCE](http://sscce.org/),關於指向結構的指針沒有什麼特別之處。 – Mat 2012-08-11 09:29:51

回答

2

無法評論,所以我會建議調試選項。你可以在函數和之前添加結構元素x地址的打印嗎?如果某人正在改變它,否則我們不會看到相同的價值。功能

typedef struct a{ 
    char str1[256]; 
    ... 
    int x; 
}a_t; 

int f(..., const a_t *a) 
{ 
    printf("X value %d, address %p", a->x, &(a->x)); 
    ... 
} 


a_t a; 
... 
a.x = 1; 
printf("X value %d, address %p", a.x, &(a.x)); 
f(..., &a); 
... 

還詳細視圖可以幫助

+0

關於打印指針地址的好建議。稍後將發佈結果。 – deepsky 2012-08-11 10:00:30