Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
程序异常终止 我正在编写一个用于C++中的AdMeMeg的机器人。我正在电脑上编译我的程序,然后将其发送到codeingame.com服务器执行。所以我没有办法在本地调试它_C++_Crash_G++_G++4.9 - Fatal编程技术网

程序异常终止 我正在编写一个用于C++中的AdMeMeg的机器人。我正在电脑上编译我的程序,然后将其发送到codeingame.com服务器执行。所以我没有办法在本地调试它

程序异常终止 我正在编写一个用于C++中的AdMeMeg的机器人。我正在电脑上编译我的程序,然后将其发送到codeingame.com服务器执行。所以我没有办法在本地调试它,c++,crash,g++,g++4.9,C++,Crash,G++,G++4.9,我已经编写了一个谓词来对一段数据进行排序。以下是相关代码: 代码1 for (const auto &zz : zone_to_zone) { vector<pair<int, int>> can_go; for (int to : zz.second) can_go.push_back({ to, visit_count[to] }); sort(can_go.begin(), can_go.end(),

我已经编写了一个谓词来对一段数据进行排序。以下是相关代码:

代码1

for (const auto &zz : zone_to_zone)
{
    vector<pair<int, int>> can_go;

    for (int to : zz.second)
        can_go.push_back({ to, visit_count[to] });

    sort(can_go.begin(), can_go.end(),
        [](const pair<int, int>& z1, const pair<int, int>& z2)
    {
        return z1.second < z2.second;
    });
for(const auto&zz:zone_to_zone)
{
向量可以走;
用于(整数到:zz.秒)
可以走了。推回({to,visit_count[to]});
排序(can_go.begin()、can_go.end(),
[](常数对和z1,常数对和z2)
{
返回z1.second
执行上述排序次数后,此程序在服务器上崩溃,并出现以下错误:

Standard Error Stream:

Aborted.

at raise.c. function __GI_raise (sig=sig@entry=6) on line 56
at abort.c. function __GI_abort () on line 89
at libc_fatal.c. function __libc_message (do_abort=do_abort@entry=1, fmt=fmt@entry=0x7ffff6b1bc60 "*** Error in `%s': %s: 0x%s ***\n") on line 175
at malloc.c. function malloc_printerr (action=1, str=0x7ffff6b17d1e "free(): invalid pointer", ptr=<optimized out>) on line 4996
at malloc.c. function _int_free (av=<optimized out>, p=<optimized out>, have_lock=0) on line 3840
at new_allocator.h. function __gnu_cxx::new_allocator<Zone>::deallocate ( this=0x7fffffffe8e0, __p=0x61e0f0) on line 110
at alloc_traits.h. function std::allocator_traits<std::allocator<Zone> >::deallocate (__a=..., __p=0x61e0f0, __n=32) on line 383
at stl_vector.h. function std::_Vector_base<Zone, std::allocator<Zone> >::_M_deallocate (this=0x7fffffffe8e0, __p=0x61e0f0, __n=32) on line 178
at stl_vector.h. function std::_Vector_base<Zone, std::allocator<Zone> >::~_Vector_base (this=0x7fffffffe8e0, __in_chrg=<optimized out>) on line 160
at stl_vector.h. function std::vector<Zone, std::allocator<Zone> >::~vector ( this=0x7fffffffe8e0, __in_chrg=<optimized out>) on line 425
标准错误流:
流产了。
在上升时,c.功能上升(信号=sig@entry=6)在第56行
在第89行的abort.c.函数_GI_abort()
在libc_fatal.c.函数_libc_消息(do_abort=do_abort@entry=1,fmt=fmt@entry=0x7ffff6b1bc60“***第175行“%s”中的错误:%s:0x%s***\n”)
在第4996行的malloc.c.函数malloc_printerr(action=1,str=0x7ffff6b17d1e“free():无效指针”,ptr=)处
在malloc.c中,第3840行的函数_int_free(av=,p=,have_lock=0)
在第110行的new_allocator.h.函数_gnu_cxx::new_allocator::deallocate(this=0x7fffffffe8e0,_p=0x61e0f0)
在第383行的alloc_traits.h.函数std::allocator_traits::deallocate(uu a=…,u p=0x61e0f0,u n=32)
在第178行的stl_vector.h.函数std::_vector_base::_M_释放(this=0x7fffffffe8e0,_p=0x61e0f0,_n=32)
在第160行的stl_vector.h.函数std::_vector_base::~_vector_base(this=0x7fffffe8e0,u in_chrg=)
在第425行的stl_vector.h.函数std::vector::~vector(this=0x7fffffffe8e0,u in_chrg=)处
如果我稍微更改谓词:

代码2

for (const auto &zz : zone_to_zone)
{
    vector<pair<int, int>> can_go;

    for (int to : zz.second)
        can_go.push_back({ to, visit_count[to] });

    sort(can_go.begin(), can_go.end(),
        [](const pair<int, int>& z1, const pair<int, int>& z2)
    {
        return false;
    });
for(const auto&zz:zone_to_zone)
{
向量可以走;
用于(整数到:zz.秒)
可以走了。推回({to,visit_count[to]});
排序(can_go.begin()、can_go.end(),
[](常数对和z1,常数对和z2)
{
返回false;
});
那么程序就不会崩溃了


服务器正在使用g++4.9。为什么会发生这种情况?代码1中有什么问题?

问题可能在所示代码之外的某个地方。内存已损坏,但发布的代码无法损坏内存。注意:如果可以查看stderr的输出,则可以“调试”远程使用消息。如果您认为异常是在排序例程中生成的,可以在其周围放置一个try/catch块,并将有用的调试信息输出到stderr,这将有助于识别can_go向量的外观(大小、值,可能根据大小打印整个内容,等等)。祝你好运。因为我看到了malloc错误,并且当你返回false时不会引发异常,所以我打赌当返回true时,问题在排序的交换部分。请。我们需要知道
区域到区域的类型,以及
访问计数是什么以及它是如何进行的populated@SergeyA,@AndyG:我使用了
vector
s和
unordered\u映射
所有代码。我无法找到解决此问题的最小、完整和可验证的代码。此外,我没有服务器必须运行的所有数据。令人惊讶的是,如果我删除排序调用,就永远不会有损坏的内存。