Hi all, I'm now learning thread reentrancy on Linux, so i write simple codes for demonstration: #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *func(void *data) { char *ptr; ptr = malloc(8); printf("thread%i -> ptr at: %p\n", *(int*) data, ptr); free(ptr); return NULL; } #define NTHREAD 5 int main(void) { pthread_t thread[NTHREAD]; int i; for (i = 0; i < NTHREAD; i++) if (pthread_create(&thread[i], NULL, func, (void*) &i)) return -1; for (i = 0; i < NTHREAD; i++) pthread_join(thread[i], NULL); return 0; } I know the func() function is not reentrant, worst printf() debugging told me that's each thread pointer to character (ptr) may has same address, like this output: thread1 -> ptr at: 0x9a80128 thread1 -> ptr at: 0x9a80138 thread2 -> ptr at: 0x9a801d8 thread4 -> ptr at: 0x9a801d8 thread4 -> ptr at: 0x9a801d8 I try to modify the func() by not free ptr to be: void *func(void *data) { char *ptr; ptr = malloc(8); printf("thread%i -> ptr at: %p\n", *(int*) data, ptr); /* free(ptr); */ return NULL; } And the result is i always got different address of each thread's ptr, such as: thread0 -> ptr at: 0x8db2098 thread1 -> ptr at: 0x8db2138 thread2 -> ptr at: 0x8db21d8 thread3 -> ptr at: 0x8db2278 thread4 -> ptr at: 0x8db2318 Can you explain me why this happen? how about my printf() debugging method? it's works for this demonstration? Thanks before. - Randi -- To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html