curs\_memleaks(3X) Library calls curs\_memleaks(3X)

# [NAME](#NAME)

**exit\_curses**, **exit\_terminfo** - check for memory leaks in *curses*

# [SYNOPSIS](#SYNOPSIS)

```
#include <curses.h>
void exit_curses(int code);
```

```
#include <term.h>
void exit_terminfo(int code);
```

```
/* deprecated (intentionally not declared in curses.h or term.h) */
void _nc_freeall(void);
void _nc_free_and_exit(int code);
void _nc_free_tinfo(int code);
```

# [DESCRIPTION](#DESCRIPTION)

These functions are used to simplify analysis of memory leaks in the *ncurses* library.

Any implementation of curses must not free the memory associated with a screen, since (even after calling [**endwin**(3X)](/man/os/ncurses/endwin.3X)), it must be available for use in the next call to [**refresh**(3X)](/man/os/ncurses/refresh.3X). There are also chunks of memory held for performance reasons. That makes it hard to analyze curses applications for memory leaks. When using the specially configured debugging version of the *ncurses* library, applications can call functions which free those chunks of memory, simplifying the process of memory-leak checking.

Some of the functions are named with a “\_nc\_” prefix because they are not intended for use in the non-debugging library:

**\_nc\_freeall**

This frees (almost) all of the memory allocated by *ncurses*.

**\_nc\_free\_and\_exit**

This frees the memory allocated by *ncurses* (like **\_nc\_freeall**), and exits the program. It is preferred over **\_nc\_freeall** since some of that memory may be required to keep the application running. Simply exiting (with the given exit-code) is safer.

**\_nc\_free\_tinfo**

Use this function if only the low-level terminfo functions (and corresponding library) are used. Like **\_nc\_free\_and\_exit**, it exits the program after freeing memory.

The functions prefixed “\_nc” are normally not available; they must be configured into the library at build time using the **--disable-leaks** option. That compiles-in code that frees memory that normally would not be freed.

The **exit\_curses** and **exit\_terminfo** functions call **\_nc\_free\_and\_exit** and **\_nc\_free\_tinfo** if the library is configured to support memory-leak checking. If the library is not configured to support memory-leak checking, they simply call **exit**.

# [RETURN VALUE](#RETURN_VALUE)

These functions do not return a value.

# [PORTABILITY](#PORTABILITY)

These functions are not part of X/Open Curses; nor do other implementations of curses provide a similar feature.

In any implementation of X/Open Curses, an application can free part of the memory allocated by curses:

•

The portable part of **exit\_curses** can be freed using **delscreen**, passing the *SCREEN* pointer returned by **newterm**.

In some implementations, there is a global variable **sp** which could be used, e.g., if the screen were only initialized using **initscr**.

•

The portable part of **exit\_terminfo** can be freed using **del\_curterm**.

In this case, there is a global variable **cur\_term** which can be used as parameter.

# [SEE ALSO](#SEE_ALSO)

[**curses**(3X)](/man/os/ncurses/curses.3X), [**curs\_initscr**(3X)](/man/os/ncurses/curs_initscr.3X), [**curs\_terminfo**(3X)](/man/os/ncurses/curs_terminfo.3X)

2024-03-16 ncurses 6.6

---

Document: exit_terminfo(3x) from ncurses 6.6.20261024-r0 (Chainguard OS)
Source: https://github.com/ThomasDickey/ncurses-snapshots
