c ++ std :: list erase函数在Mac和Linux编译器上表现不同

时间:2016-10-30 08:49:17

标签: c++ linux macos

以下代码在我的Mac上表现良好,但在我的linux上,它会导致分段错误。

std::list<sock>::iterator iter;
for(iter = sock_list.begin(); iter != sock_list.end(); ++iter) {
    if ((*iter).fd == param1) {
        sock_list.erase(iter);
    }
}

经过搜索后,我发现通过添加 - 在第4行,这也使得它在我的linux上运行。

std::list<sock>::iterator iter;
for(iter = sock_list.begin(); iter != sock_list.end(); ++iter) {
    if ((*iter).fd == param1) {
        sock_list.erase(iter--);
    }
}

虽然我做到了,但我仍然很好奇他们为什么表现不同。两者都有gcc 5.x和c ++ 11。

0 个答案:

没有答案