Quantcast
Channel: Intel® Software - Intel® C++ Compiler
Viewing all articles
Browse latest Browse all 1175

Crash by vector destructor if used with range based for loop

$
0
0

Hello,

I have a problem with vector destructor if I use it with range based for loop.

Sample code to reproduce this issue:

#include <vector>

class foo
{
public:
    void bar(const std::vector<int>& ints)
    {
        std::vector<int> items;
#if 1
        for (const auto& i : ints)
        {
#else
        for (size_t j = 0; j < ints.size(); ++j)
        {
            int i = ints[j];
#endif
            items.push_back(i+5);
        }
    }
};

int main()
{
    std::vector<int> ints{ 1,2,5,7,9,0 };

    foo f;
    f.bar(ints);

    return 0;
}

The call stack:

>    VectorCrash.exe!std::_Container_base12::_Orphan_all() Line 223    C++
     VectorCrash.exe!std::_Vector_alloc<std::_Vec_base_types<int, std::allocator<int> > >::_Orphan_all() Line 614    C++
     VectorCrash.exe!std::vector<int, std::allocator<int> >::_Tidy() Line 1640    C++
     VectorCrash.exe!std::vector<int, std::allocator<int> >::~vector() Line 977    C++
     VectorCrash.exe!main() Line 36    C++
     VectorCrash.exe!invoke_main() Line 64    C++

It crashes in:

inline void _Container_base12::_Orphan_all()

function in xutility header, when _ITERATOR_DEBUG_LEVEL == 2, also in Debug configuration.

My compiler: Intel® Parallel Studio XE 2017 Update 1 Composer Edition for C++ Windows* Integration for Microsoft* Visual Studio* 2015, Version 17.0.71.14

It works fine with Microsoft C++ compiler.

Best regards

Przemek

Zone: 


Viewing all articles
Browse latest Browse all 1175

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>