Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Failure of STL map "insert()" (VxWorks v6.8). MIPS

75 views
Skip to first unread message

spacec...@yahoo.com

unread,
Aug 7, 2013, 2:52:58 PM8/7/13
to
A_MAP.insert(std::pair<uint16_t, THE_STRUCT_TYPE>(Key, A_STRUCT))

A_MAP[Key] = A_STRUCT;

Both methods work on Visual C++ Express 2012.

Both methods fail on VxWorks at run-time with Signal 11.

However, the following does not crash on VxWorks (but since nothing has been inserted, the pair values will be the (un)initialized values):

std::map<>::iterator itBegin = A_MAP.begin;
printf("A_MAP.begin = %d\n", itBegin);

FWIW:

typedef THE_STRUCT_TYPE
{
char a_char;
uint16_t an_int_array[20];
char a_char_array[10];
uint16_t an_int;
}

Any news on the use of the map container in v6.8 ? This is really a straightforward usage.

Some documentation exists regarding compile/link flags to specify the range of STL functionality that's available, and even which compler (Diablo/EDG/VxWorks C++ versus GNU C++) to use. This is an administered tool, for which I have little control/access, adminned by administrators to whom I have little access, so getting license numbers, C++ compiler usage info, etc., is difficult.

I woudl liek to knwo, though, if this type of failure justifies makign that type of effort.


Also, does v6.9 implement teh C++ 2011 Standard, specifically the std::unordered_map container ?

spacec...@yahoo.com

unread,
Aug 7, 2013, 3:47:49 PM8/7/13
to
I woudl appreciate assistance/guidance from anyone with knowledge of the use of STL maps on VxWorks v6.8.

The two methods described use copy construction. Thsi may be teh problem for VxWorks, e.g., it may not support copying user defined types. A third method, emplace(), constructs in place but is only available in "C++ 2011".

Also, orrection to two items in original post:

std::map<uint16_t, THE_STRUCT_TYPE>::iterator itBegin = A_MAP.begin;


typedef THE_STRUCT_TYPE
{
char a_char;
uint16_t an_int_array[20];
char a_char_array[10];
uint16_t an_int;

} THE_STRUCT_TYPE

spacec...@yahoo.com

unread,
Aug 10, 2013, 3:16:51 PM8/10/13
to
Solved.

It seems that, to which I have elsewhere seen it alluded, the mapped type must, at least in some cases, be a pointer; presumably solving the copy construction prohibition and the unavailability, in pre-C++-2011 installations, of the emplace method.
0 new messages