全局变量在主程序中取值和在线程中取出的值怎么不一样??????

fidt982 2005-01-20 04:53:55
我在程序中定义了一个全局变量PROOF_FRE
发现在主程序中取出的值和在线程中取出的值竟然不一样,但通过监视窗口打开看到的却是一样

我查看一下汇编代码,发现取值的地址竟然不一样,忘哪位老大帮忙解释一下.

这上面不能贴图,我只好将汇编代码手工打上来了.

Main.cpp


Main.cpp.173: int a=PROOF_FRE;
00402CCA 0FBF155C624300 movsx edx,[0x0043625c]
00402CD1 8955AO mov [ebp-0x60],edx

线程里面

ThreadSend.cpp.47 int a=PROOF_FRE;
0040C322 OFBF15DC624300 movsx edx,[0x004362dc]
0040C329 8955A8 mov [dbp-0x58],edx
...全文
134 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fidt982 2005-01-21
  • 打赏
  • 举报
回复
谢谢了
Maconel 2005-01-21
  • 打赏
  • 举报
回复
你在.h文件里生明了int A;那么它肯定不是全局变量了。
http://zydlm.wxhc.com.cn/down_view.asp?id=132
这里有我写的一个简单的全局变量的例子,你去看看吧。
fidt982 2005-01-21
  • 打赏
  • 举报
回复
源程序代码太长了,我还是给个例子你吧

------------------unit1.h--------------------------------------
int A;

class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;


-------------------unit1.cpp-----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
A=4;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage(IntToStr(A));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MyThread *thread=new MyThread(false);
}


----------------------unit2.cpp-----------------------------
__fastcall MyThread::MyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall MyThread::Execute()
{
//---- Place thread code here ----
FreeOnTerminate=true;
int a=A;
MessageBox(Application->Handle,IntToStr(a).c_str(),"",MB_ICONERROR);
}


BUTTON1和BUTTON2弹出的值一个是0,另外一个却是4,但是通过监视器看A的值都是4
Maconel 2005-01-21
  • 打赏
  • 举报
回复
还有是怎么用全局变量的。
Maconel 2005-01-21
  • 打赏
  • 举报
回复
我测试了一下,地址是一样的。
你是怎么用线程的,把代码贴出来看一下。
fidt982 2005-01-21
  • 打赏
  • 举报
回复
不至于吧,放了一天都没人理,,自己顶

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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