社区
进程/线程/DLL
帖子详情
变量地址
VCHelp之乐天蛋黄派
2012-01-11 11:01:55
类中成员变量
class CMem
{
typedef struct {
...
}MEM;
MEM m_Mem
}
实际上出问题的类比上面的类复杂的多,上面的类只是为了更容易描述问题。
成员函数 m_Mem, 在赋值的时候地址是 &m_Mem = 0x000000a, 但到使用的时候它的地址变成了 &m_Mem = 0x000000b. 当然面里包含的值的也错误的。 我很奇怪,究竟是什么原因造成了这个问题?
...全文
140
14
打赏
收藏
变量地址
类中成员变量 class CMem { typedef struct { ... }MEM; MEM m_Mem } 实际上出问题的类比上面的类复杂的多,上面的类只是为了更容易描述问题。 成员函数 m_Mem, 在赋值的时候地址是 &m_Mem = 0x000000a, 但到使用的时候它的地址变成了 &m_Mem = 0x000000b. 当然面里包含的值的也错误的。 我很奇怪,究竟是什么原因造成了这个问题?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
VCHelp之乐天蛋黄派
2012-02-12
打赏
举报
回复
这个问题找到了些线索,放上来跟大家分享一下。
编译器:VS2005
MFC类在线程中使用时的确会出一些莫名奇妙的问题。
1, 在线程中使用 theApp.m_pMainWnd 时,虽然 theApp.m_pMainWnd 的确有具体的值(不是NULL)但用的时候却总是会在 IsWindow 中产生断言失败。
2, 在 CxxxApp 中定义的函数比如:
CxxxView* CxxxApp::GetActiveViewEx ()
{
CMainFrame * pFrm = (CMainFrame*)AfxGetMainWnd();
return (CxxxView*)pFrm->GetActiveView();
}
在 其它窗口类中调用这个函数一点问题都没有。 但一旦放到线程中去调用的时候, 函数的第一行 pFrm 总是NULL, 如果改成这样:
CxxxView* CxxxApp::GetActiveViewEx ()
{
CMainFrame * pFrm = (CMainFrame*)theApp.m_pMainWnd;
return (CxxxView*)pFrm->GetActiveView();
}
虽然 theApp.m_pMainWnd 是一个具体的值(不是NULL),但会产生 IsWindow 断言失败。
////////////////////////////////////////////////////////////////////////////////////////
具体原因还望高人指点。
向立天
2012-01-14
打赏
举报
回复
[Quote=引用 8 楼 hb19820102 的回复:]
引用 6 楼 xianglitian 的回复:
耽误你使用了么
这个问题我没有解决,但我用别的方法把这个问题绕过去了。我担心会不会是程序一小部分堆栈已被破坏,存在安全隐患。
[/Quote]
我觉得你可以这样
写一个这个结构最简单的应用
看看是不是有一样的问题
当然你可能已经试验过了
如果有我觉得这可能是语言或编译器本身的问题
能绕就绕吧
如果没有那可能是你其他位置的操作对这个位置产生了影响
那就需要自己检查了
wltg2001
2012-01-14
打赏
举报
回复
给出的信息太少了,根本看不出什么来。
周成风
2012-01-14
打赏
举报
回复
和类的定义无关,应该是使用的时候导致内存错误导致的
hhyhw2001
2012-01-12
打赏
举报
回复
应该在你的其他代码里面有问题,你的CMem是动态创建的吗?
龙行天下之Sky
2012-01-11
打赏
举报
回复
仔细检查检查你的逻辑
龙行天下之Sky
2012-01-11
打赏
举报
回复
类中定义结构体
用结构体再定义类的成员变量
理论上没有问题
但是你的这个结构体在外部是没有办法使用的
ouyh12345
2012-01-11
打赏
举报
回复
堆栈被破坏了?
gg606
2012-01-11
打赏
举报
回复
楼主提供的信息太少,大家一起猜谜
VCHelp之乐天蛋黄派
2012-01-11
打赏
举报
回复
[Quote=引用 6 楼 xianglitian 的回复:]
耽误你使用了么
[/Quote]
这个问题我没有解决,但我用别的方法把这个问题绕过去了。我担心会不会是程序一小部分堆栈已被破坏,存在安全隐患。
wangxiangdong_sl
2012-01-11
打赏
举报
回复
卡巴斯基的源代码:http://download.csdn.net/download/wangxiangdong_sl/4014388
向立天
2012-01-11
打赏
举报
回复
耽误你使用了么
VCHelp之乐天蛋黄派
2012-01-11
打赏
举报
回复
[Quote=引用 4 楼 hotpos 的回复:]
不同的CPP文件对齐不同
看 #pragam pack 指令
[/Quote]
和这个应该没有关系,两个地址之间相差数千字节。
hotpos
2012-01-11
打赏
举报
回复
不同的CPP文件对齐不同
看 #pragam pack 指令
C/C++ 指针的13份资料
1. **指针的概念**:指针是一种特殊的
变量
,它存储的是内存
地址
,即另一个
变量
的内存位置。通过指针,我们可以直接操作存储在该
地址
上的数据。 2. **声明指针**:在C/C++中,我们使用星号(*)来声明指针,例如`int *...
大漠多线程线程传参数据
变量
地址
传参-
变量
数据
地址
• 1、
变量
数据
地址
=取
变量
数据
地址
() • 2、启动线程(,
变量
数据
地址
,,) • 3、指针到文本(
变量
数据
地址
) 511遇见易语言多线程大漠多线程 课程源码: .版本 2 .支持库 spec .支持...
C语言返回局部
变量
以及局部
变量
地址
结论:函数可以返回局部
变量
的...但是如果返回局部
变量
的
地址
,那么返回的是该局部
变量
地址
的值拷贝,但是函数运行结束,该拷贝指针所指向的栈内容已经被释放即为野指针,对野指针所指向内容的操作都会造成段错误 ...
Go语言---函数返回局部
变量
地址
一、C语言中返回函数中局部
变量
值和指针(1) 在...(2) 函数返回局部
变量
地址
:局部
变量
内存分配在栈空间,因为函数返回后,系统自动回收了函数里定义的局部
变量
,所以运行时去访问一个被系统回收后的
地址
空间,一定就...
A2L
变量
地址
抓取
在matlab中抓取A2L
变量
地址
在标定时我们需要A2L文件提供
变量
信息,而通过MBD生成的A2L中
变量
的
地址
是空的,如下图所示: 而matlab中有一个自带的函数 asap2post(ASAP2File, MAPFile); 能够将MAP文件中
变量
的
地址
...
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章