2014-04-16 81 views
0
#include <stdio.h> 


typedef struct test{ 
int app; 
}test; 

int main() 
{ 
int fi; 
FILE* fp; 
test* banned; 
banned->app=2; 
fi=chdir("/home"); 
    printf("%d", fi); 
return 0; 
} 

這是一個較大的程序的一部分。我需要能夠從一個讀入文件導航到一個目錄,並將這些信息放入一個結構體中。然而,每當這個程序編譯它seg故障。在gcc上編譯運行gdbSegfault與箭頭運算符在C運行chdir然後打印

#0 0x08048421 in main() 

這是編譯器的問題,還是代碼中缺少某些東西來啓用它?

注意:這已經解決了我是一個完全的白癡,並試圖從帽子里拉出一個拉博特,我只是在我頭腦中進行了簡單的說明......否則我知道我沒有將我的參考與實際值相關聯,因此編譯器投擲一個合適的。該解決方案是建立一個「真正的結構」,然後通過參考具有參考指針指向該= & normalpointer感謝您的幫助

也不亞於ID愛用的結構沒有參考,我需要這種傳遞到不同的功能。但是,提到解決方案比什麼IM做

+1

「它賽格故障」 - 哎呀,有什麼驚喜,'banned'具有明確的價值和所有。 –

+0

禁止未初始化。改爲禁止測試; banned.app = 2;' – BLUEPIXY

+0

你還沒有分配任何被禁止的空間。 – cup

回答

2

您寫下未初始化的指針,因爲你已經定義banned爲指針,以test類型的結構,而不是test類型的實例更好。將test* banned更改爲test banned。然後,您將使用.而不是->來訪問banned的成員,例如, banned.app=2

+1

然後'banned-> app = 2'應該改爲'banned.app = 2'。 –

+0

@MikeHolt對。編輯我的答案。 – tgies

+0

引用的原因是它可以傳遞給一個函數並進行修改,在任何情況下,我找到了解決方案,創建一個真實的項目,然後通過pointerstruct =&normalstruct指定它的指針;作品奇觀 – user3542874