The directional attributes in and out determine how the client and server allocate and free memory. The following table summarizes the effect of directional attributes on memory allocation:
| Directional attribute | Memory on client |
Memory on server |
|---|---|---|
| in | Client application must allocate before call. | Server stub allocates. |
| out | Client stub allocates on return. | Server stub allocates top-level pointer only; server application must allocate all embedded pointers. Server also allocates new data as needed. |
| in, out | Client application must allocate initial data transmitted to server; client stub allocates additional data. | Server stub allocates; server application allocates new data as needed. |
The following table summarizes the effect of directional attributes on memory deallocation:
| Directional attribute | Memory on client |
Memory on server |
|---|---|---|
| (all cases) | Not freed. | Freed by server stubs on return (subject to ACF attribute allocate). |
Note that for out-only parameters, MIDL allocates only the memory required for the top-level pointer parameter. The generated stub does not chase, or dereference, subsequent pointers that are part of the out-only data structure. The server application must allocate and initialize all such pointers.