--- description: "Learn more about: _aligned_offset_malloc" title: "_aligned_offset_malloc" ms.date: "4/2/2020" api_name: ["_aligned_offset_malloc", "_o__aligned_offset_malloc"] api_location: ["msvcrt.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr100_clr0400.dll", "msvcr110.dll", "msvcr110_clr0400.dll", "msvcr120.dll", "msvcr120_clr0400.dll", "ucrtbase.dll", "api-ms-win-crt-heap-l1-1-0.dll", "api-ms-win-crt-private-l1-1-0.dll"] api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_aligned_offset_malloc", "aligned_offset_malloc"] helpviewer_keywords: ["_aligned_offset_malloc function", "aligned_offset_malloc function"] ms.assetid: 447681a3-7c95-4655-86ba-fa3a4ca4c521 --- # _aligned_offset_malloc Allocates memory on a specified alignment boundary. ## Syntax ```C void * _aligned_offset_malloc( size_t size, size_t alignment, size_t offset ); ``` ### Parameters *size*
The size of the requested memory allocation. *alignment*
The alignment value, which must be an integer power of 2. *offset*
The offset into the memory allocation to force the alignment. ## Return Value A pointer to the memory block that was allocated or **NULL** if the operation failed. ## Remarks **_aligned_offset_malloc** is useful in situations where alignment is needed on a nested element; for example, if alignment was needed on a nested class. **_aligned_offset_malloc** is based on **malloc**; for more information, see [malloc](malloc.md). **_aligned_offset_malloc** is marked `__declspec(noalias)` and `__declspec(restrict)`, meaning that the function is guaranteed not to modify global variables and that the pointer returned is not aliased. For more information, see [noalias](../../cpp/noalias.md) and [restrict](../../cpp/restrict.md). This function sets **errno** to **ENOMEM** if the memory allocation failed or if the requested size was greater than **_HEAP_MAXREQ**. For more information about **errno**, see [errno, _doserrno, _sys_errlist, and _sys_nerr](../../c-runtime-library/errno-doserrno-sys-errlist-and-sys-nerr.md). Also, **_aligned_offset_malloc** validates its parameters. If *alignment* is not a power of 2 or if *offset* is greater than or equal to *size* and nonzero, this function invokes the invalid parameter handler, as described in [Parameter Validation](../../c-runtime-library/parameter-validation.md). If execution is allowed to continue, this function returns **NULL** and sets **errno** to **EINVAL**. By default, this function's global state is scoped to the application. To change this, see [Global state in the CRT](../global-state.md). ## Requirements |Routine|Required header| |-------------|---------------------| |**_aligned_offset_malloc**|\| ## Example For more information, see [_aligned_malloc](aligned-malloc.md). ## See also [Data Alignment](../../c-runtime-library/data-alignment.md)