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

Unhandled exception at 0x001e1078 in Dijkstra's_Algorithm.exe: 0xC0000005: Access violation reading location 0xbaadf00d

本文关键字:0xC0000005 异常 访问冲突 读取 0xbaadf00d 位置 未处理 0x001e1078 exe Algorithm Dijkstra      更新时间:2023-10-16

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

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

在图形中。

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 ++ ;
    }
}
input

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

您尚未显示足够的代码来知道如何修复它。我不知道states是做什么用的,count是从哪里来的,或者为什么需要保存指向变量的指针。

相关文章: