Memory

Managing memory and allocations is something that every C program has to deal with. In the case of NNG, it can be more complicated because the underlying platform code can provide different allocators that might not be compatible with the use system allocator used by malloc and free.

Allocate Memory

void *nng_alloc(size_t size);

The nng_alloc function allocates a contiguous memory region of at least size bytes, and returns a pointer to it. The memory will be 64-bit aligned. Note that the memory may have random data in it, just like with malloc.

If memory cannot be allocated for any reason, then NULL will be returned. Applications that experience this should treat this like NNG_ENOMEM.

Memory returned by nng_alloc can be used to hold message buffers, in which case it can be directly passed to nng_send using the flag NNG_FLAG_ALLOC. Alternatively, it can be freed when no longer needed using nng_free.

important

Do not use the system free function (or the C++ delete operator) to release this memory. On some configurations this may work, but on others it will lead to a crash or other unpredictable behavior.

Deallocate Memory

void nng_free(void *ptr, size_t size);

The nng_free function deallocates memory previously allocated by nng_alloc.

The size argument must exactly match the size argument that was supplied to nng_alloc when the memory was allocated.

Duplicate String

char *nng_strdup(const char *src);

The nng_strdup duplicates the string src and returns it.

This is logically equivalent to using nng_alloc to allocate a region of memory of strlen(s) + 1 bytes, and then using strcpy to copy the string into the destination before returning it.

The returned string should be deallocated with nng_strfree, or may be deallocated using the nng_free using the length of the returned string plus one (for the NUL terminating byte).

Free String

void nng_strfree(char *str);

The nng_strfree function is a convenience function that can be used to deallocate strings allocated with nng_strdup.

It is effectively the same as nng_free(strlen(str) + 1).