C++ code always getting stuck at "operator new"

Hi,

I am using FreeRTOS with an NXP RW610 series board. I created two tasks, first task is responsible to initialize the network module. The second task is responsible for receiving the UDP packets from the Wi-Fi network. We are using an audio library which is responsible for processing the UDP packets.
While allocating memory for the packet, the code is getting stuck at the “new operator”.
below is the debugger call stack:
WiFi-Link.elf
Thread #1 57005 (Suspended : Signal : SIGTRAP:Trace/breakpoint trap)
_exit() at 0x8086f40
abort() at 0x8084814
operator new() at 0x80a7efc
__gnu_cxx::new_allocator::allocate() at new_allocator.h:121 0x804bf90
std::allocator_traits<std::allocator >::allocate() at alloc_traits.h:460 0x804b1a0
std::_Vector_base<unsigned char, std::allocator >::_M_allocate() at stl_vector.h:346 0x804a3d4
std::vector<unsigned char, std::allocator >::_M_allocate_and_copy<__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator > > >() at stl_vector.h:1,511 0x8055124
std::vector<unsigned char, std::allocator >::operator=() at vector.tcc:226 0x8053abc
AudioDistributorPacket::operator=() at AudioDistributorPacket.h:16 0x805cd7c
FecGrid::Set() at FecGrid.h:93 0x805cec2

Kindly help me to resolve this issue.

regards
Nagesha

Hi Nagesha,

It looks like you have exception in operator new() function.
You can take a look at this thread to redefine new() and delete() to use pvPortMalloc/vPortFree and feedback further problems.

Hi [CHING-HSIN, LEE],

Thank you for your quick response.
Kindly let us know how to redefine new() and delete() APIs in a dedicated C file.
In fact, I was going through the thread link and tried to redefine the allocation in a new file called utility.c. But I am getting below build error for “operator new”.

utility.c:1:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘new’
1 | void * operator new( size_t size )

This must be a file compiled as c++, not c. Create a file with the extension .cpp and relocate your overridden operator there.

Hi RAc,

Thank you for your response. I change the file extension from utility.c to utility.cpp. Now new()/delete() operators are working fine as expected.

Regards
Nagesha

1 Like

Great it’s working! Now pay attention to which version of malloc() the new operator is using, so that you don’t get surprises in the future.

FreeRTOS allows you to choose among several malloc() versions. There exist a version that don’t implement the free() functionality. Another behaves exactly as the malloc() C standard. Other allows you to write your own object’s pool.

Besides that, in memory constrained systems memory fragmentation can lead to memory allocation problems (even if you think you have plenty of RAM available). Whenever possible, allocate memory statically (for your tasks and objects).

Hi Xavier,

Thank you for suggestions. Sure I will consider all these.

Thanks and regards
Nagesha