小弟c++基础不好,有个地方不明白:
(1)
Trans t ("abc","abc"); //Trans是一个类
AfxBeginThread(TestThread,&t);和
(2)
Trans* t = new Trans("abc","abc"); 
AfxBeginThread(TestThread,t);
有什么不同?不都是把地址传过去TestThread方法中去吗?
为什么(1)的那个运行时会出现错误 ?TestThread方法如下:
/////////////////////////////////////////////////////
UINT TestThread(LPVOID pParam)
{
Trans* t  = (Trans*) pParam;
MessageBox(0,t->strurl,t->strlocal,MB_OK);
delete t;
return 0;
}
/////////////////////////////////////////////////////
请指点~~~~ 谢谢!!!

解决方案 »

  1.   

    Because t may be destroyed before below code executedTrans* t  = (Trans*) pParam;
    MessageBox(0,t->strurl,t->strlocal,MB_OK);If you want to test,you can sleep a while,allowing TestThread() to execute completely, after "AfxBeginThread(TestThread,&t);"
    (,and remove "delete t;" frome "TestThread()".)
      

  2.   

    用SLEEP让你的线程完全启动!
      

  3.   

    也不是完全像楼上说的那样吧?
    第二个有什么错么?没有.第一个的错误和joinrry说的一样,t是一个局部变量,调用AfxBeginThread的函数肯定会返回对吧,这时局部变量t的内存会做其它的用途.如果这时线程还没有返回...