#include #include int function1(int argument) { int * p = (int *) malloc(sizeof(int)); int k[10]; printf("%s\n", __FUNCTION__); free(p); return argument; } struct Document { Document * head; Document * tail; Document() { printf("%s\n", __FUNCTION__); } ~Document() { printf("%s\n", __FUNCTION__); } int foo(int argument) { printf("%s\n", __FUNCTION__); return argument; } }; int function2(int argument) { int * p = (int *) malloc(sizeof(int)); int k[10]; printf("%s\n", __FUNCTION__); return argument; } Document * bar() { Document * document = (Document *) malloc(sizeof(Document)); // cycle document->head = (Document *) malloc(sizeof(Document)); document->head->head = (Document *) malloc(sizeof(Document)); document->head->head->head = document; return document; } int main() { int temporary = 1; Document * document = (Document *) malloc(sizeof(Document) * 5); printf("%i\n", 1); int result = bar()->foo(temporary); printf("%i\n", 2); function1(1); function2(1); printf("%p\n", document); printf("%i\n", 3); }