请教多级菜单中的函数指针问题

2020-02-01 16:33发布

#define u8 unsigned char

void (*KeyFuncPtr)(); //按键功能指针

typedef struct{
        u8 KeyStateIndex; //当前状态索引号
        u8 KeyEnterState; //按下"确认"键时转向的状态索引号
        u8 KeyExitState; //按下"返回"键时转向的状态索引号
        u8 KeyUpState;  //按下"向上"键时转向的状态索引号
        u8 KeyDownState;  //按下"向下"键时转向的状态索引号
        void (*CurrentOperate)(); //当前状态应该执行的功能操作
}KbdTabStruct;


KbdTabStruct volatile const code KeyTab[]={

//       |-----------> Index
//       |  Enter
//       |  |  Exit
//       |  |  |  Up
//       |  |  |  |  Down   --->功能函数
//       |  |  |  |  |       |
       { 0, 1, 2, 3, 4,(*DispMenuInit)},   // 图标层菜单:第一级菜单
       { 1, 0, 0, 0, 0,(*DispMenuEnter)},
       { 2, 0, 0, 0, 0,(*DispMenuExit)},
       { 3, 0, 0, 0, 0,(*DispMenuUp)},
       { 4, 0, 0, 0, 0,(*DispMenuDown)},
      
       .......
      
       ........
      
       { 200, 201, 202, 203, 204,(*DispMenuInit)},   // :第四级菜单
       { 201, 0,   0,   0,    0, (*DispMenuEnter)},
       { 202, 0,   0,   0,    0,(*DispMenuExit)},
       { 203, 0,   0,   0,    0,(*DispMenuUp)},
       { 204, 0,   0,   0,    0,(*DispMenuDown)},
      
   
};   
请问当 KeyStateIndex >= 100后编译后程序就跑飞了,好像堆栈溢出了,是不是当索引号大时,函数指针到不了指定的函数了,比如当 KeyStateIndex =200时,要执行对应的函数:void DispMenuInit(void),就溢出了,这种现象是什么原因呢?麻烦各位指教,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
cuiyun
1楼-- · 2020-02-01 18:50
不懂
lusson
2楼-- · 2020-02-01 23:31
应该不会存在这样的问题
你的菜单是怎么嵌套的?
Eiman
3楼-- · 2020-02-02 02:15
你的“......”是不是真的有5到199?数组必须要有205个,否则有误
onlineforyou
4楼-- · 2020-02-02 07:55
 精彩回答 2  元偷偷看……
pigeon0411
5楼-- · 2020-02-02 08:45
内存不够的表现
ksniper
6楼-- · 2020-02-02 14:30
mark 慢慢学习

一周热门 更多>