1) Destructors. The why and how to. 2) Identify the bad code : typedef struct struct_bitsi_fileId_list { int numberOfFileIds; unsigned int* fileIdList; } AppBitsiFileIdList; int main() { Node* node; ... AppBitsiFileIdList* fList=AppBitsiPeerGetFileIds(node); ... ... MEM_free(fList); } AppBitsiFileIdList* AppBitsiPeerGetFileIds(Node* node) { AppBitsiFileIdList* fList=(AppBitsiFileIdList*) MEM_malloc(sizeof(AppBitsiFileIdList)); ... ... fList->numberOfFileIds=4; newFileIdList=(unsigned int*) MEM_malloc(4*(numberOfFileIds+1)); fList->fileIdList=newFileIdList; return fList; } 3) A very brief comment on exceptions and handling. Try/throw/catch http://cplus.about.com/od/exceptions/