The XGetICValues function returns NULL if no
error occurred; otherwise, it returns the name of the first argument that
could not be obtained. An argument could not be obtained for any of the
following reasons:

The argument name is not recognized.

The input method
encountered an implementation-dependent error.

Each IC attribute value argument
(following a name) must point to a location where the IC value is to be
stored. That is, if the IC value is of type T, the argument must be of type
T*. If T itself is a pointer type, then XGetICValues allocates memory
to store the actual data, and the client is responsible for freeing this
data by calling XFree with the returned pointer. The exception to this
rule is for an IC value of type XNVaNestedList (for preedit and status
attributes). In this case, the argument must also be of type XVaNestedList.
Then, the rule of changing type T to T* and freeing the allocated data
applies to each element of the nested list.