QP实现之函数指针数组无法获取正确地址的问题
2010-03-11 13:48
429 查看
在QHsm_init()函数中有一个函数指针数组,用于保存从顶层QHsm_top进入目标状态的路径。声明如下:
QStateHandler path[QEP_MAX_NEST_DEPTH_];
在遍历完之后,需要从第一层开始依次执行ENTRY动作:
Q_SIG(me) = (QSignal)Q_ENTRY_SIG;
do { /* retrace the entry path in reverse (correct) order... */
(void)(*path[ip])(me);
/* enter path[ip] */
} while ((--ip) >= (int8_t)0);
但是在执行到(void)(*path[ip])(me);的时候,每次都跳到0x0f之内的空间执行,导致程序出错,有时获得的地址甚至是0xFFFF,到了地址空间的最底部,PC加一后变为0x0,执行出现了问题。但是查看path数组内的数据也是正确的,除了没有赋值的成员为0xFFFF外,ip也是对的,分析了很多次都没有结果。
后来怀疑是没有初始化的问题,将path数组声明为static后,执行正常,此时数组成员都被初始化为0,能正确获取函数指针。
QStateHandler path[QEP_MAX_NEST_DEPTH_];
在遍历完之后,需要从第一层开始依次执行ENTRY动作:
Q_SIG(me) = (QSignal)Q_ENTRY_SIG;
do { /* retrace the entry path in reverse (correct) order... */
(void)(*path[ip])(me);
/* enter path[ip] */
} while ((--ip) >= (int8_t)0);
但是在执行到(void)(*path[ip])(me);的时候,每次都跳到0x0f之内的空间执行,导致程序出错,有时获得的地址甚至是0xFFFF,到了地址空间的最底部,PC加一后变为0x0,执行出现了问题。但是查看path数组内的数据也是正确的,除了没有赋值的成员为0xFFFF外,ip也是对的,分析了很多次都没有结果。
后来怀疑是没有初始化的问题,将path数组声明为static后,执行正常,此时数组成员都被初始化为0,能正确获取函数指针。
相关文章推荐
- 约瑟夫环问题的 PHP 实现--使用 PHP 数组内部指针操作函数
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- 约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
- 一次微信公众号URL(服务器地址)无法获取到$_post参数的问题。
- 声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是()
- 结构体指针作为函数参数传递却无法传值的有关问题
- 指针指向函数中的局部变量的地址的问题
- 指针作为函数的形参,给指针所在地址赋值问题
- 关于通过GPS模块获取的坐标数据无法在Google地图上正确标记的问题说明
- VS2010中CMainFrame::OnCreate()函数里用GetMenu()无法获取菜单指针
- 学习心得——数组作为函数参数后sizeof获取不到数组在内存中所占字节数的问题
- C语言数组,指针,函数等问题
- 解决centos虚拟机无法获取ipv4地址的问题
- Unity3d中Input获取键的按下或者弹起,无法正确响应的问题
- 请教一个sizeof在模版函数内无法正常获取大小的问题。
- 指针与数组的区别,以及函数的实现过程
- 数组名、数组名取地址以及作为函数传递带来的问题
- 1.如何避免野指针2.获取字符串的两种方法。以及malloc,calloc,ralloc的使用注意点3.二维三维数组4.数组和函数的区别
- 理解数组,结构 ,函数指针,指针函数,数组指针,指针数组,结构指针的定义和实现
- 【java基础】引用类型数组初始化中,setter和getter函数空指针问题