Copyright 2019-2023,2024 Thomas E. Dickey *
Copyright 2008-2010,2017 Free Software Foundation, Inc. *
*
Permission is hereby granted, free of charge, to any person obtaining a *
copy of this software and associated documentation files (the *
"Software"), to deal in the Software without restriction, including *
without limitation the rights to use, copy, modify, merge, publish, *
distribute, distribute with modifications, sublicense, and/or sell *
copies of the Software, and to permit persons to whom the Software is *
furnished to do so, subject to the following conditions: *
*
The above copyright notice and this permission notice shall be included *
in all copies or substantial portions of the Software. *
*
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
*
Except as contained in this notice, the name(s) of the above copyright *
holders shall not be used in advertising or otherwise to promote the *
sale, use or other dealings in this Software without prior written *
authorization. *
***************************************************************************
$Id: curs_memleaks.3x,v 1.35 2024/03/16 15:35:01 tom Exp $
#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);
Any implementation of curses must not free the memory associated with a screen, since (even after calling \%endwin(3X)), it must be available for use in the next call to \%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:
5 \%_nc_freeall This frees (almost) all of the memory allocated by \%ncurses.
5 \%_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.
5 \%_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.
In any implementation of X/Open Curses, an application can free part of the memory allocated by curses: .bP 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. .bP 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.