C pthread 编写正确但根本不起作用;为什么?

C pthread written correctly but does not work at all; why?

我正在学习 c 中的线程以备考试,我正在尝试解决以下由教授作为培训提供的练习:

Write a program that accepts an integer number 'n' from command line and creates n threads; then waits their termination.

我试图解决这个问题,但由于某种原因它似乎不起作用。
这是我的代码:

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

void *StampaThread(void *arg){
   char *ret;
   strcpy(ret,"Fine thread");
   printf("thread %p scritto!\n", arg);
   pthread_exits(ret);
}

int main(int argc,char** argv){

pthread_t thread[1000];
void *ret;

if(argc!=2){
   perror("Argomenti insufficienti o in eccesso!\n");
}
else
{
   int n=atoi(argv[0]);
   int i;
   for(i=0;i<n;i++){
      if(pthread_create(&thread[i],NULL,StampaThread,&i)!=0){
         perror("problema nella creazione dei thread\n");
         exit(1);
      }
      if((pthread_join(thread[i],&ret))!=0){
         perror("problema nella attesa dei thread\n");
         exit(3);
      }
      printf("%s",(char *)ret);
   }
}
return 0;
}

感谢第一个评论区一些开发者的贡献,我找到了正确的代码来解决这个问题;上瘾了,我添加了一些代码来显示整数,而不是程序使用的内存位置。
代码如下:

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

void *StampaThread(void *arg){
   char *ret=(char *)malloc(sizeof(char *));
   strcpy(ret,"Fine thread");
   printf("thread %d scritto!\n", *(int *)arg);
   free(arg);
   pthread_exits(ret);
}

int main(int argc,char** argv){

pthread_t thread[1000];
void *ret;

if(argc!=2){
   perror("Argomenti insufficienti o in eccesso!\n");
}
else
{
   int n=strtol(argv[1],NULL,10);
   int i;
   int *arg;
   for(i=0;i<n;i++){
      arg=malloc(sizeof(*arg));
      *arg=i;
      if(pthread_create(&thread[i],NULL,StampaThread,arg)!=0){
         perror("problema nella creazione dei thread\n");
         exit(1);
      }
   }
   for(i=0;i<n;i++){
      if((pthread_join(thread[i],&ret))!=0){
         perror("problema nella attesa dei thread!\n");
         exit(3);
      }
    }
    printf("%s",(char *)ret);
}
return 0;
}