# Quick Start

y_malloc provides `malloc`, which creates a variably sized array at run-time:

```pawn
new Alloc:arr = malloc(128); // Create an array with 128 slots*.

mset(arr, 5, 42); // Equivalent to `arr[5] = 42`.

printf("%d", mget(arr, 5)); // Equivalent to `printf("%d", arr[5]);`.

free(arr); // Get rid of the memory again.
```

`free` is important - once you are finished with a dynamic array you should release it again.  Otherwise you will eventually run out of memory and `malloc` will fail.  If malloc DOES fail, it returns `NO_ALLOC` (or just `0`):

```pawn
new Alloc:arr = malloc(16); // Create an array with 16 slots.

if (arr == NO_ALLOC) // Or just `if (!arr)`
{
	P:E("`malloc` failed.  Remember to free memory when you are finished with it.");
}
```

`malloc` will NOT initialise the memory, to set all the values to 0 use `calloc` instead.

\* Because of implementation details, the true size may be different, but it will be AT LEAST 128 cells.

