2013-04-17 85 views
0

我有一個雙指針,用於創建鏈表的數組。基本上,我試圖從已經在數組中的「城市」中獲取數據,並將這些城市分配到該雙指針的「行」部分,以便我可以用單獨的「航班」數據遍歷這些行文件,如果它們匹配,則將所有數據鏈接到雙指針中的特定行上。分配雙指針值時出現分段錯誤

我type.h文件,其中包含了stuct爲節點,等:

#ifndef TYPE_H 
#define TYPE_H 
#include<string> 

struct flight 
{ 
    int flightID; 
    std::string origin; 
    std::string destination; 
    int price; 
}; 

typedef flight listItemType; 

struct Node 
{ 
    listItemType data; 
    Node * next; 
}; 

typedef Node ** nodePtr; 
typedef Node * node; 
#endif 

我flightMap.h文件,它包含了所有我的類對象:

#include "type.h" 
#include <string> 


using namespace std; 
const int MAX = 50; 
#ifndef flightMap_Class 
#define flightMap_Class 

class flightMapClass 
{ 
    private: 
     int size; 
     string* cities; 
     nodePtr flights; 
     node Head; 

    public: 
     flightMapClass(); 
     ~flightMapClass(); 
     void readCities(); 
     void readFlights(); 
}; 

#endif 

和我flightMap。其中包含這些對象的操作:

#include "flightMap.h" 
#include <string> 
#include <iostream> 
#include <cstdlib> 
#include <fstream> 

using namespace std; 

flightMapClass::flightMapClass() 
{ 
    size = 0; 
    Head = NULL; 
} 

flightMapClass::~flightMapClass() 
{ 
    node cur = Head; 

    while(Head!=NULL) 
    { 
     cur->next = NULL; 
     delete cur; 
     Head = Head->next; 
     cur = Head; 
    } 
} 

void flightMapClass::readCities() 
{ 
    int index = 0; 
    ifstream fin; 
    fin.open("cities.dat"); 
    fin >> size; 
    cities = new string[size]; 
    while(fin.peek()!=EOF) 
    { 
     fin >> cities[index]; 
     index ++; 
    } 
    for(int i = 0; i < index -1; i++) 
    { 
     cout << cities[i] << endl; 
    } 
    fin.close(); 

} 

void flightMapClass::readFlights() 
{ 
    cout <<"Reading into Flight Data" << endl; 
    flights = new Node * [size]; 
    for(int i = 0; i < size; i++) 
    { 
     flights[i]->data.origin = cities[i]; 
     cout << flights[i]->data.origin << endl; 
    } 
} 

當我嘗試運行程序,這裏是出把..(在我的主文件中,我首先運行readCities,然後閱讀Flights,所以我已經確定城市實際上是正確地加載到我在「readCities」中加載的數組中,因爲它們事實上輸出正確) :::

Albuquerque 
Chicago 
San-Diego 
Nashville 
San-Francisco 
Miami 
Dallas 
Washington-DC 
St-Louis 
New-York-City 
Los-Angeles 
Boston 
Las-Vegas 
Orlando 
Columbus 
Seattle 
Atlanta 
Memphis 
Houston 
Austin 
Denver 
Minneapolis 
Tampa 
Portland 
Kansas-City 
Phoenix 
Philadelphia 
San-Jose 
Charlotte 
Detroit 

reading flights 
Reading into Flight data 
Segmentation fault 

...我已經基本上確定它是從代碼::

flights[i]->data.origin = cities[i]; 
cout << flights[i]->data.origin << endl; 

我將如何分配這些數據線進入我的航班「行」部分,至於沒有得到分段錯誤?這是不是正確的方法來設置它,因爲從它的外觀來看,它將字符串分配給一個字符串?我很困惑。

回答

3
flights = new Node * [size]; 

是不夠的。這只是節點指針數組。指針不指向已分配的節點。

您還需要分配每個節點。

for(int i = 0; i < size; i++) 
{ 
    flights[i] = new Node; 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    flights[i]->data.origin = cities[i]; 
    cout << flights[i]->data.origin << endl; 
} 
+0

完美!這就是我所忽略的,非常感謝。 – Volman2014

+0

@JohnSmith不客氣。 – stardust

+3

@JohnSmith你應該開始使用矢量。它會使事情變得更容易。 – stardust