### Function

# GLib PtrArray free

#### Declaration

    gpointer*
    g_ptr_array_free (
      GPtrArray* array,
      gboolean free_seg
    )

#### Description

Frees the memory allocated for the `GPtrArray`. If `free_seg` is `TRUE` it frees the memory block holding the elements as well. Pass `FALSE` if you want to free the `GPtrArray` wrapper but preserve the underlying array for use elsewhere. If the reference count of `array` is greater than one, the `GPtrArray` wrapper is preserved but the size of `array` will be set to zero.

If array contents point to dynamically-allocated memory, they should be freed separately if `free_seg` is `TRUE` and no `GDestroyNotify` function has been set for `array`.

Note that if the array is `NULL` terminated and `free_seg` is `FALSE` then this will always return an allocated `NULL` terminated buffer. If pdata is previously `NULL`, a new buffer will be allocated.

This function is not thread-safe. If using a `GPtrArray` from multiple threads, use only the atomic `g_ptr_array_ref()` and `g_ptr_array_unref()` functions.

This function is not directly available to language bindings.

#### Parameters

`array`

  Type: An array of `gpointer`

  A `GPtrArray`.

  The data is owned by the caller of the function.

`free_seg`

  Type: `gboolean`

  If `TRUE` the actual pointer array is freed as well.

#### Return value

Type: `gpointer*`

The pointer array if `free_seg` is `FALSE`, otherwise `NULL`. The pointer array should be freed using g_free().

The caller of the function takes ownership of the data, and is responsible for freeing it.
The return value can be `NULL`.