How to know whether we ran out of memory or it was an error while using realloc()?

c, realloc

Solution

Quoting from here

RETURN VALUE

Upon successful completion with a size not equal to 0, realloc() returns a pointer 
to the (possibly moved) allocated space. If size is 0, either a null pointer or a 
unique pointer that can be successfully passed to free() is returned. If there is
not enough available memory, realloc() returns a null pointer  and sets errno to 
[ENOMEM].

Problem

`realloc(void *ptr, size_t new_size)` returns `NULL` in two cases: - If there is not enough memory, the old memory block is not freed and NULL is returned. - NULL is also returned if error has occurred. How do I know what type of problem occurred? If we are short of memory, I might page some memory to disk. How do I know whether I should do `free(ptr)`? (maybe it was already freed by realloc).

Original source

Related problems