2015-04-25 71 views
-5

我將狀態類的指針設置爲該節點的指針,但我得到訪問衝突我不知道什麼是問題?在Dijkstra's_Algorithm.exe 0x001e1078未處理的異常:0xC0000005:訪問衝突讀取位置0xbaadf00d

的例外是在這裏:iosfwd

static int __CLRCALL_OR_CDECL compare(const _Elem *_First1, const _Elem *_First2, 
     size_t _Count) 
     { // compare [_First1, _First1 + _Count) with [_First2, ...) 
     return (_CSTD memcmp(_First1, _First2, _Count)); 
     } 

我的代碼 在DijkstraState.h

void setCurrent(vertex<T>* v) 
    { 
     current = v ; 
    } 

在graph.h

private member: DijkstraState<type>* states ;` 
in constructor: states = new DijkstraState<type>(); 
template <class type> 
void graph<type>::add_vertex(vertex<type> input) 
{ 
    type vertex_data = input.get_data() ; 
    //check vertex does not exist 
    if(indexes.find(vertex_data) == indexes.end()) 
    { 
     indexes[input.get_data()] = count ; 
     vertices[count] = input ; 
     states[count].setCurrent(&(vertices[count]));////////////////////////// 
     count ++ ; 
    } 
} 
+0

我的水晶球告訴我你在某處取消了未初始化的指針。 – HolyBlackCat

+0

函數結束時函數參數超出範圍。您很可能不想存儲指向它的指針。 –

+0

如果我將&(輸入)更改爲&(頂點[count]),它會導致同樣的問題@RetiredNinja Ninja –

回答

1

input是你的函數的參數。你可以把它看作是一個局部變量,它使用從調用者傳入的值進行初始化。函數返回時,該參數變量將超出範圍。如果您在add_vertex完成後嘗試使用指針,則您在setCurrent的調用中保存了一個指向input的指針,並留下一個無效指針和未定義的行爲。

你還沒有顯示足夠的代碼來知道如何解決它。我不知道states適用於什麼或count來自何處,或者您爲什麼需要保存指向變量的指針。

+0

我已經改變&(輸入)爲&(頂點[count]),並且我得到了同樣的問題int count; //是數字*圖中的頂點 DijkstraState * states; //用於存儲變量以幫助解決最短路徑問題,並且我需要將指針保存在其內部圖形的當前頂點@The Dark –

相關問題