---
name: "Alloc"
section: "3"
platform: "macos"
package: "tcl"
version: "152"
release: "macOS 26.5"
platforms: ["macos"]
url: "https://new.carta.tech/Alloc"
---

# Alloc(3)

allocate or free heap memory

## NAME

Tcl\_Alloc, Tcl\_Free, Tcl\_Realloc, Tcl\_AttemptAlloc, Tcl\_AttemptRealloc, ckalloc, ckfree, ckrealloc, attemptckalloc, attemptckrealloc - allocate or free heap memory

## SYNOPSIS

```
#include <tcl.h>

char *
Tcl_Alloc(size)

void
Tcl_Free(ptr)

char *
Tcl_Realloc(ptr, size)

char *
Tcl_AttemptAlloc(size)

char *
Tcl_AttemptRealloc(ptr, size)

char *
ckalloc(size)

void
ckfree(ptr)

char *
ckrealloc(ptr, size)

char *
attemptckalloc(size)

char *
attemptckrealloc(ptr, size)
```

## ARGUMENTS

Size in bytes of the memory block to allocate. Pointer to memory block to free or realloc.

## DESCRIPTION

These procedures provide a platform and compiler independent interface for memory allocation.  Programs that need to transfer ownership of memory blocks between Tcl and other modules should use these routines rather than the native **malloc()** and **free()** routines provided by the C run-time library.

**Tcl\_Alloc** returns a pointer to a block of at least *size* bytes suitably aligned for any use.

**Tcl\_Free** makes the space referred to by *ptr* available for further allocation.

**Tcl\_Realloc** changes the size of the block pointed to by *ptr* to *size* bytes and returns a pointer to the new block. The contents will be unchanged up to the lesser of the new and old sizes.  The returned location may be different from *ptr*.  If *ptr* is NULL, this is equivalent to calling **Tcl\_Alloc** with just the *size* argument.

**Tcl\_AttemptAlloc** and **Tcl\_AttemptRealloc** are identical in function to **Tcl\_Alloc** and **Tcl\_Realloc**, except that **Tcl\_AttemptAlloc** and **Tcl\_AttemptRealloc** will not cause the Tcl interpreter to **panic** if the memory allocation fails.  If the allocation fails, these functions will return NULL.  Note that on some platforms, but not all, attempting to allocate a zero-sized block of memory will also cause these functions to return NULL.

The procedures **ckalloc**, **ckfree**, **ckrealloc**, **attemptckalloc**, and **attemptckrealloc** are implemented as macros.  Normally, they are synonyms for the corresponding procedures documented on this page.  When Tcl and all modules calling Tcl are compiled with **TCL\_MEM\_DEBUG** defined, however, these macros are redefined to be special debugging versions of these procedures.  To support Tcl's memory debugging within a module, use the macros rather than direct calls to **Tcl\_Alloc**, etc.

## KEYWORDS

alloc, allocation, free, malloc, memory, realloc, TCL\_MEM\_DEBUG
