社区
C++ 语言
帖子详情
跨模块调用指针函数
laibinghua
2012-04-10 10:01:10
麻烦大虾解答一下该问题:
一个指针函数在一个模块中注册,却在另一模块中调用,当调用指针函数的时候,却真正实现的调用的函数却不是对应的函数。该问题是否和各模块之间的内存堆栈有关系。敬请详解。3Q!
...全文
185
6
打赏
收藏
跨模块调用指针函数
麻烦大虾解答一下该问题: 一个指针函数在一个模块中注册,却在另一模块中调用,当调用指针函数的时候,却真正实现的调用的函数却不是对应的函数。该问题是否和各模块之间的内存堆栈有关系。敬请详解。3Q!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luciferisnotsatan
2012-04-10
打赏
举报
回复
可以在编译时就加上HAVE_STANDBY这个宏,而不是在某个都文件中。
或者,调整一下你的include顺序。
另外,如果你的代码里一会有HAVE_STANDBY,一会没有HAVE_STANDBY,那么肯定会出问题。MiscInterface这个类的成员会不一样。
Red_angelX
2012-04-10
打赏
举报
回复
结构体都没编译进去那个成员,那么只可能是js_get_misc_inf里面把值填在了那块内存区域,
SystemStandby_getStandbyStatus指针越界访问了预期的内存.
laibinghua
2012-04-10
打赏
举报
回复
楼上的那个说法:我说明一下情况啊。
在编译的时候确实是在结构体中没有编译进去。但是在查看MiscInterface这个指针的时候,发现有SystemStandby_getStandbyStatus这个指针的值,而且也能取到正确的值。
Red_angelX
2012-04-10
打赏
举报
回复
#ifdef是预编译的,你要测试HAVE_STANDBY 起作用没有打印一下sizeof MiscInterface就可以查出来了.
最好是3在1前面
laibinghua
2012-04-10
打赏
举报
回复
(1)定义结构体
typedef struct{
int32 (*readDataBlock)(int32, uint32, void*);
#ifdef HAVE_STANDBY
SystemStandby*(*SystemStandby_getHandle)();
int(*SystemStandby_getStandbyStatus)();
int(*SystemStandby_ctrl)(SystemStandby *me, int name , void *arg);
int(*SystemStandby_proc)(SystemStandby *me, int msg, unsigned int p1, unsigned int p2);
#endif
}MiscInterface;
(2)调用
MiscInterface *misc_handle = js_get_misc_inf();
standbystatus = misc_handle->SystemStandby_getStandbyStatus() == 1 ? 2 : 1;
(3)#define HAVE_STANDBY
调用的时候调用SystemStandby_getStandbyStatus()这个函数的时候,跑到MiscInterface这个结构体中的其他函数readDataBlock去了。
HAVE_STANDBY这个宏已经定义。在其他头文件中定义。
会不会因为头文件的引用顺序问题导致的呢?
假设头文件引用顺序:(1)---> (3)---> (2)
这样的话,会不会也会导致该问题的重现
luciferisnotsatan
2012-04-10
打赏
举报
回复
帖些示意代码吧
《c语言深度解析》第3、4章 存储类、生命周期、作用域、链接域,
指针
与
函数
课程内容: 第3章: 存储类与auto、static、register关键字 指令、常量、变量的生命周期 ...void *
指针
类型 const与
指针
函数
指针
函数
调用
—栈的使用过程 回调
函数
和
函数
指针
数组
指针
与
函数
传参 递归
函数
内联
函数
c深入剖析
跨
函数
调用
指针
(多级
指针
)问题
在c语言中,如果想要通过
函数
调用
来改变值,有两种方式,第一种是通过
指针
的传递来改变值(这种可以一次改变多个变量的值),第二种是通过
函数
的返回值来传递值。第一种,中传递的时候其实只是地址的传递,相对第二...
VB动态
调用
类
模块
中的
函数
的方法
动态地
调用
函数
是令广大VB程序员比较苦恼的一件事情。VB不同于C++,不同于Java,没有传递
函数
指针
的概念。这么一说,肯定有很多的大神级别的VB高手要来喷我了,说“新手不懂就不要在这里胡说!”。的确,我承认,...
软件
模块
中程序
调用
的方式
一般有三种
调用
方式:同步
调用
带有回调的
调用
异步
调用
同步
调用
同步
调用
时最常用的方式,由上层
模块
调用
下层
模块
。在
调用
过程中,上层
模块
将被阻塞,直到下层
模块
执行完毕并返回。在方向上,同步
调用
是单向的
调用
方式...
在linux中应用程序如何
调用
模块
内的
函数
-实际上它也是内核
模块
),用户空间与内核空间之间只有通过一些特定的系统
函数
来进行通讯(如什么user_to_kernel),而绝对不可能通过“直接
调用
模块
里的
函数
”这种形式来通讯。 那么,所编写的
模块
里的
函数
...
C++ 语言
64,282
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章