类里的变量,线程获取不到?

weixin_37449199 2017-02-04 04:21:23

class A
{
public:
void Init(char* str,int a);
friend UINT _stdcall Begin(void* p);
char m_str[260];
};
A ga;

按钮里:
ga.Init("ssss",5);
Sleep(1000);
_beginthreadex(0,0,Begin,(LPVOID)&gA,0,0);

线程函数
UINT _stdcall Begin(void* p)
{
A* pa=(A*)p;
char s1[260];
strcpy(s1,pa->m_str); 这个怎么获取的是" "啊?没字符串呢?

return 0;
}
...全文
503 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxxny 2017-02-10
  • 打赏
  • 举报
回复
你这样传指针过去如果 A ga是全局的就没有问题,如果是局部的话,对象可能在你访问之前就被系统释放掉了。 你访问的是非法的内存。
bird_fly_2012 2017-02-07
  • 打赏
  • 举报
回复
引用 6楼我是你的主体 的回复:
找到原因了....野指针释放的时候没p=NULL
你帖子上的程序没有体现这一点啊,哪里需要p=NULL?
weixin_37449199 2017-02-04
  • 打赏
  • 举报
回复
内存溢出....一下午和晚上
weixin_37449199 2017-02-04
  • 打赏
  • 举报
回复
找到原因了....野指针释放的时候没p=NULL
schlafenhamster 2017-02-04
  • 打赏
  • 举报
回复
看看你真正的 void Init(char* str,int a)
weixin_37449199 2017-02-04
  • 打赏
  • 举报
回复
传数据啊. 好像程序没问题.cpu,内存爆卡. 线程里有个写数据的,把那个字符串的数据给弄没了.
schlafenhamster 2017-02-04
  • 打赏
  • 举报
回复
void Init(char* str,int a) 那个 5 有什么用 ?
schlafenhamster 2017-02-04
  • 打赏
  • 举报
回复

#include <process.h>
class A
{
	public:
	void Init(char* str,int a)
	{
	  strcpy(m_str,str);
	}
	friend UINT _stdcall Begin(void* p);
	char m_str[260];
};

A ga;

UINT _stdcall Begin(void* p)
{
	A* pa=(A*)p;
	char s1[260];
	strcpy(s1,pa->m_str);
	AfxMessageBox(s1);
//
	return 0;
}

void CAboutDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	ga.Init("ssss",5);
//	Sleep(1000);
	_beginthreadex(0,0,Begin,(LPVOID)&ga,0,0);
}

weixin_37449199 2017-02-04
  • 打赏
  • 举报
回复
void A::Init(char* str,int a) { strcpy(m_str,str); }

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧