2012-06-14 85 views
0

我縮小了我的代碼範圍,發現問題的根源在於打開文件的時間。 該文件確實存在,編譯時我沒有收到任何警告或錯誤。Ifstream在打開文件時崩潰程序

int main(int argc, const char* args[]) 
{ 
    cout << "Wellcome" << endl; 
    cout << args[1]; 
    ifstream exists(args[1]); 
    if(!exists) 
    { 
     printf("FILE NOT FOUND"); 
     return 1; 
    } 
    exists.close(); 
    ifstream* in; 
    in->open(args[1],ios::binary|ios::in); 
    //do stuff 
    in->close(); 
    return 0; 
} 
+0

絕對不需要使用指向'ifstream'的指針。讓班級通過自動存儲時間來分配工作,並在[RAII]上進行閱讀(http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) –

回答

2

你已經創建了一個指向ifstream對象,但你永遠不分配的ifstream它指向。爲了解決這個問題,只考慮堆棧中分配的:

ifstream in; 
in.open(args[1],ios::binary|ios::in); 
//do stuff 
in.close(); 

一般情況下,你通常不需要,除非你希望他們活得比創建它們的功能動態分配的對象。

希望這會有所幫助!

+0

那麼有道理:)它的工作原理。我不知道爲什麼我沒有想到這個xD – NullData