간단한 쓰레드 질문입니다

익명 사용자의 이미지

#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
 
void * ThreadMain_1(void * );
 
int main(int argc, char * argv[])
{
	pthread_t tid;
	int return_Value;
	int * arg;
 
	for(int i =1; i<=5; i++)
	{
		arg = (int *)malloc(sizeof(int));
		//*arg = i;
 
		//쓰레드 생성
		pthread_create(&tid, NULL, ThreadMain_1, (void *)arg);
		printf("나 : %lu 생성한 쓰레드 : %lu\n", pthread_self(), tid);
 
		//쓰레드 종료 대기
		pthread_join(tid, (void **)&return_Value);
 
		//반환값 이용
		printf("쓰레드 반환값 : %d\n", return_Value);
	}
}
void * ThreadMain_1(void * arg)
{
	int * num = (int *)arg;
 
	printf("만들어진 쓰레드 : %lu 인자 : %d\n", pthread_self(), *num);
	free(num);
	pthread_exit((void *)1);
	//return (void *)num;
}

간단한 쓰레드 예제를 만들고 있는데, 무한루프에 걸리는 게 문제입니다.
for문의 i값을 업데이트 하지 않고 다시 쓰레드를 만드는데, 아무리 봐도 무엇이 문제인지 모르겠습니다..ㅠㅠ
감사합니다..