2015-04-02 70 views
-1

由於某種原因我得到「進程終止狀態-1073741819」錯誤,每當我運行我的程序,我讀過一些人因爲錯誤而得到這個錯誤用代碼塊/編譯器,我只想知道在我重新安裝編譯器之前是否有任何代碼有問題。我使用的是code :: blocks和GNU GCC編譯器。「進程終止狀態-1073741819」簡單程序與向量

我的代碼創建了一個存儲一個星期40個工作小時的向量,並在該向量中存儲了一個向量,該向量存儲代表這些小時中可用的5個人的字母。

Schedule.cpp:

#include <iostream> 
#include "Schedule.h" 
#include <vector> 
#include <string> 

using namespace std; 

/// Creates a Vector which holds 40 items (each hour in the week) 
/// each item has 5 values (J A P M K or X, will intialize as J A P M K) 

vector< vector<string> > week(40, vector<string> (5)); 

Schedule::Schedule(){ 
     for (int i = 0; i<40; i++){ 
      week[i][0] = 'J'; 
      week[i][1] = 'A'; 
      week[i][2] = 'P'; 
      week[i][3] = 'M'; 
      week[i][4] = 'K'; 
     } 
     // test 
     cout << week[1][3] << endl; 
    } 

頭文件:

#ifndef SCHEDULE_H 
#define SCHEDULE_H 
#include <vector> 
#include <string> 

using namespace std; 

class Schedule 
{ 
    public: 
     Schedule(); 
    protected: 
    private: 
     vector< vector<string> > week; 

}; 

#endif // SCHEDULE_H 

main.cpp中:

#include <iostream> 
#include "Schedule.h" 
#include <vector> 
#include <string> 

using namespace std; 

int main() 
{ 
    Schedule theWeek; 
} 
+0

使用GDB並運行它,然後使用回溯。 – Cinch 2015-04-02 08:39:22

+0

'vector > week(40,vector (5));' - 這會創建一個名爲week的全局矩陣變量(不要與Schedule :: week混淆)。這是故意的嗎?我假設你想在構造函數中初始化成員變量;如果是這樣,你應該在構造函數中寫'this-> week',或者刪除/重命名全局變量聲明,或者將全局聲明放在名稱空間中。 – utnapistim 2015-04-02 08:49:17

回答

3

這不是一個copiler錯誤。

您的構造函數中出現內存錯誤。

你的代碼有幾個錯誤,例如在你的cpp中聲明瞭一個全局向量星期,然後它在構造函數中被隱藏,因爲構造函數將訪問Schedule :: week。

你的CPP應該是這樣的:

week[i][0] = 'J' ; 

此刻的你:

// comment out the global declaration of a vector week ... 
// you want a vector for each object instantiation, not a shared vector between all Schedule objects 
// vector< vector<string> > week(40, vector<string> (5)); 


Schedule::Schedule() 
{ 
    for (int i=0;i<40;i++) 
    { 
     vector<string> stringValues; 
     stringValues.push_back("J"); 
     stringValues.push_back("A"); 
     stringValues.push_back("P"); 
     stringValues.push_back("M"); 
     stringValues.push_back("K"); 
     week.push_back(stringValues); 
    } 
} 

當您嘗試訪問您的周向量首次您得到您的代碼中的內存故障調用這行代碼,你的Schedule :: week向量中有0個元素(所以week [i]已經是錯誤了)。