请帮小弟我分析下下面的这个简单的多线程程序,多谢

请帮我分析下下面的这个简单的多线程程序,谢谢.
现在在试着弄弄多线程,写了下面几行程序,想让线程处理函数的对话框中弹出0,1,2,3
但弹出的老是其他的值.我现在把一部分代码贴上来了,请帮我分析下,谢谢了.
//线程处理函数
DWORD   WINAPI   ThreadFunc(   LPVOID   lpParam   )  
{  
        int   *   i=(int   *)lpParam;
          int   j=*   i;
char   x;
itoa(j,&x,10);  
AfxMessageBox(&x);//为什么这里出来的不是0   ,1,2,3啊?
 
return   0;  
}  
//下面是分发线程的程序
DWORD   dwThreadId,   dwThrdParam   =   1;  
HANDLE   hThread[4];  
int   param[5]={0,1,2,3};
for(int   i=0;i <4;i++){
        hThread[i]   =   CreateThread(  
                NULL,                                      
                0,                                                    
                ThreadFunc,                                    
                &param[i],                        
                0,                                                  
                &dwThreadId);                              
}

------解决方案--------------------
两个问题:
1. itoa()不是那么用的,你需要自己提供缓冲区给itoa。例如:
char buf[16];
itoa(value, buf, 10);
你的写法会造成内存越界访问。当然,这不是AfxMessageBox输出随机数的原因。

2. 分发线程的int param[5]={0,1,2,3};数组使用的内存会在退出所在函数的时候释放掉,lpParam所指的内容就是不确定的了。
------解决方案--------------------
小弟啊,原因就在于你的param不是全局的,你把param设成全局的就OK了.