2015-09-16 96 views
1

這是我的代碼鏈接。如果我簡單地通過對每一行使用迭代器來打印列表,但它在循環中給出了分段錯誤。有人可以解釋爲什麼這是給分段錯誤?

#include<bits/stdc++.h> 
using namespace std; 
list<int> *adj = new list<int>[5]; 
void addEdge(int v,int w) 
{ 
    adj[v].push_back(w); 
} 
int main() 
{ 
    addEdge(1,2); 
    addEdge(2,3); 
    addEdge(3,4); 
    addEdge(4,5); 
    addEdge(5,2); 
    for(int i =1;i<6;i++) 
    { 
     list<int>::iterator j; 
     for(j = adj[i].begin();j!=adj[i].end();++j) 
     { 
      cout<<*j<<endl; 
     } 
    } 
    return 0; 
} 

回答

0

adj可用陣列上可接受的索引的範圍是0..4,不1..5。類似於語言傾向於使用基於偏移量的索引。

外部for循環超出了指數的可用範圍。並且在內部for循環中引用adj[5]時程序崩潰。你指的是你不具備的堆上的地址。

今後請嘗試在gcc之類的調試器中運行該程序,或使用類似valgrind之類的工具(它允許您跟蹤內存使用情況和訪問)。

相關問題