The buffer where the contract context will be copied needs to be allocated by the contract function or table operator before calling FNC_TblOpGetContractDef. You can call FNC_TblOpGetContractLength to obtain the length of the context. This length can be passed to FNC_malloc to allocate the space needed. You must release the space once you are done with the context:
ctxPtr = FNC_malloc(FNC_TblOpGetContractLength()); ... FNC_free(ctxPtr);