---
name: "xmalloc"
section: "3pub"
platform: "linux"
package: "publib-dev"
version: "0.40-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/xmalloc"
---

# xmalloc(3pub)

memory allocation functions for Publib

## NAME

xmalloc, xrealloc, xfree, xstrdup, xmemdup, memdup - memory  allocation functions for Publib

## SYNOPSIS

\#include \<publib.h\>

```
void *xmalloc(size_t bytes);
void *xrealloc(void *ptr, size_t bytes);
void xfree(void *ptr);
char *xstrdup(const char *string);
void *memdup(const void *mem, size_t bytes);
void *xmemdup(const void *mem, size_t bytes);
```

## DESCRIPTION

These functions are utility functions for memory allocation from the publib library.  *xmalloc*, *xrealloc*, and *xfree* are error checking versions of the standard library routines *malloc*, *realloc*, and *free*, respectively.  They are guaranteed to never return unless there was no problem: if, for example, *xmalloc* is unable to allocate the requested amount of memory, it prints an error message and terminates the program.  Hence, the caller does not need to check for a NULL return value, and the code that calls these functions is simpler due to the lack of error checks.

Similarly, *xstrdup* is an error checking version of the common (though not standard) *strdup* routine, which creates a duplicate of a string by allocating memory for the copy with *malloc*.  (For systems that lack *strdup*, publib provides one in its portability module; it is always declared in \<publib.h\>.)

*memdup* is similar to *strdup*, it creates a copy of an arbitrary memory area (the arguments are a pointer to the beginning of the area, and its size) by allocating memory for the copy with *malloc*.  *xmemdup* is its error checking version.

## NOTE

*xmalloc* and *xrealloc* treat a request to allocate a block of 0 bytes as an error. *xrealloc* will allow its first argument to be NULL.

## SEE ALSO

publib(3), [malloc(3)](/malloc/3.md), [strdup(3)](/strdup/3.md)

## AUTHOR

Lars Wirzenius (lars.wirzenius@helsinki.fi)
