---
name: "Tcl_Alloc"
section: "3"
platform: "linux"
package: "tcl"
version: "8.6.16-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Tcl_Alloc"
---

# Tcl\_Alloc(3)

allocate or free heap memory

```

```

## NAME

Tcl\_Alloc, Tcl\_Free, Tcl\_Realloc, Tcl\_AttemptAlloc, Tcl\_AttemptRealloc, Tcl\_GetMemoryInfo, 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)

void
Tcl_GetMemoryInfo(dsPtr)

char *
ckalloc(size)

void
ckfree(ptr)

char *
ckrealloc(ptr, size)

char *
attemptckalloc(size)

char *
attemptckrealloc(ptr, size)
```

## ARGUMENTS

- unsigned int *size* (in)

  Size in bytes of the memory block to allocate.

- char *\*ptr* (in)

  Pointer to memory block to free or realloc.

- Tcl\_DString *\*dsPtr* (in)

  Initialized DString pointer.

  ```

  ```

## 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.

**Tcl\_GetMemoryInfo** appends a list-of-lists of memory stats to the provided DString. This function cannot be used in stub-enabled extensions, and it is only available if Tcl is compiled with the threaded memory allocator.

## KEYWORDS

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