求助:函数指针问题 能编译不能执行

liuchang5772 2008-05-29 10:22:02
想在单片机上写一个多级菜单的程序,先在VC上模拟了一下,能编译过去,但运行就出错了
大家帮忙看一看
//本程序实现最简单的三层菜单结构,现在只实现把三层菜单的名字输出
#include"stdio.h"
#define uchar unsigned char
void init(void)
{printf("init"); //输出函数名
}

void display1(void)
{
printf("display1\n"); //输出函数名
}

void stan_wave12(void)
{
printf("stan_wave12\n");//输出函数名
}
void wave_form5(void)
{
printf("wave_form5\n"); //输出函数名
}

/*定义一个数据结构,stata指示当前的状态,
keyenter指向下一个状态 point为指向函数的指针*/
typedef struct{
uchar state;
uchar keyenter;
void (*point)(void);
} key_index;

void (*pfuc)(void)=NULL; //定义函数指针


key_index keytab[4]= //三层菜单
{
{0,1,init},
{1,5,wave_form5},
{5,12,stan_wave12},
12,99,display1};
void main()
{

uchar key_index=0;
uchar i;


for(i=0;i<3;i++) //每循环一次进一级
{

key_index=keytab[key_index].keyenter;


pfuc=keytab[key_index].point;

(*pfuc)(); //执行相应功能
}


}
...全文
142 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2008-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
在第三次的时候key_index是5
超过你的数组范围了,你还访问.
这就是著名的越界错误.
[/Quote]
是第二次与之后,都越界了.
大大怪老张 2008-05-29
  • 打赏
  • 举报
回复
这种简单错误在 vc 里按 f10 在cb里按 f8 就能找到。
  • 打赏
  • 举报
回复
在第三次的时候key_index是5
超过你的数组范围了,你还访问.
这就是著名的越界错误.

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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