Dijkstra's_Algorithm.exe中0x001e1078处的未处理异常:0xC0000005:访问冲突读取位置0xbaadf00d

时间:2015-04-25 08:29:55

标签: c++

我正在将状态类的指针设置为节点的指针但是我得到访问冲突我不知道是什么问题?

例外情况在这里: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 ++ ;
    }
}

1 个答案:

答案 0 :(得分:1)

input是您的函数的参数。您可以将其视为使用从调用者传入的值初始化的局部变量。当函数返回时,该参数变量将超出范围。您在input的调用中保存了指向setCurrent的指针,如果在add_vertex完成后尝试使用指针,则会留下无效指针和未定义的行为。

您还没有显示足够的代码来了解如何修复它。我不知道states的用途是什么,count来自哪里,或者为什么需要保存指向变量的指针。