最近写一个菜单程序,子菜单个数有部分是动态的菜单数量,就必须用到结构体数组中包含动态结构体数组,但是不知为何引用出错。
MenuItem *Del_UserMeun;
MenuItem FactorySetMenu[3];
MenuItem UserTypeMenu[3];
MenuItem AddFtMenu[5];
MenuItem AddUserMenu[5];
MenuItem SystemSetMenu[3];
MenuItem UserMangerMenu[4];
MenuItem MainMenu[3];
MenuItem HomeMenu[3];
MenuItem* DelUserMenu_Creat()
{
u8 UserCont;
u8 i;
EEPROM_read_n(UserContAddr,&UserCont,1);
if(UserCont==0x00||UserCont==0xff)
{
UserCont = 0;
}
uart_printf("malloc struct\r\n");
Del_UserMeun = (MenuItem *)malloc(sizeof(MenuItem)*(UserCont+1));
if(Del_UserMeun!=NULL)
{
Del_UserMeun[0].MenuCount=UserCont;
Del_UserMeun[1].DisplayString=ShowDelUserHead;
Del_UserMeun[2].Subs = Del_User;
Del_UserMeun[3].ChildrenMenus = Null;
Del_UserMeun[4].ParentMenus = UserMangerMenu;
for(i=1;i<UserCont;i++)
{
Del_UserMeun[i].MenuCount=UserCont;
Del_UserMeun[i].DisplayString=ShowUserID;
Del_UserMeun[i].Subs = Del_User;
Del_UserMeun[i].ChildrenMenus = Null;
Del_UserMeun[i].ParentMenus = UserMangerMenu;
}
}
return Del_UserMeun;
}
void FreeGetUserMenu_Creat()
{
free(Del_UserMeun);
}
MenuItem UserTypeMenu[3]=
{
//MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 2, ShowUserTypeHead, NullSubs, Null, AddUserMenu},
{ 2, ShowAdminType, SetAdminType, Null, AddUserMenu},
{ 2, ShowOrdType, SetOrdType, Null, AddUserMenu},
};
MenuItem AddFtMenu[5]=
{ //MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 4, ShowAddFtHead, NullSubs, Null, AddUserMenu},
{ 4, ShowAddFt1, AddFt1, Null, AddUserMenu},
{ 4, ShowAddFt2, AddFt2, Null, AddUserMenu},
{ 4, ShowAddFt3, AddFt3, Null, AddUserMenu},
{ 4, ShowAddFt4, AddFt4, Null, AddUserMenu},
};
MenuItem AddUserMenu[5]=
{ //MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 4, ShowAddUserHead, NullSubs, Null, UserMangerMenu},
{ 4, ShowAddFt, NullSubs, AddFtMenu, UserMangerMenu},
{ 4, ShowAddCard, AddCard, Null, UserMangerMenu},
{ 4, ShowAddPsw, AddPassword, Null, UserMangerMenu},
{ 4, ShowUserType, NullSubs, UserTypeMenu, UserMangerMenu},
};
MenuItem FactorySetMenu[3]=
{
// MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 2, ShowFactorySetHead, NullSubs, Null, SystemSetMenu},
{ 2, ShowEnter, Del_All_UserInfo, Null, SystemSetMenu},
{ 2, ShowEsc, NullSubs, SystemSetMenu, SystemSetMenu},
};
MenuItem SystemSetMenu[3]=
{ // MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 2, ShowSystemSetHead, NullSubs, Null, MainMenu},
{ 2, ShowTimeSet, TimeSet, Null, MainMenu},
{ 2, ShowFactorySet, NullSubs, FactorySetMenu, MainMenu},
};
MenuItem UserMangerMenu[4]=
{ // MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 3, ShowUserMangerHead, NullSubs, Null, MainMenu},
{ 3, ShowAddUser, AddNewUser, AddUserMenu, MainMenu},
{ 3, ShowDelUser, NullSubs, Del_UserMeun, MainMenu},
{ 3, ShowEmPower, NullSubs, Null, MainMenu},
};
MenuItem MainMenu[3]=
{ // MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 2, ShowMenuHead, NullSubs, Null, HomeMenu},
{ 2, ShowUserManger, NullSubs, UserMangerMenu, HomeMenu},
{ 2, ShowSystemSet, NullSubs, SystemSetMenu, HomeMenu},
};
MenuItem HomeMenu[3] =
{
// MenuCount DisplayString Subs ChildrenMenus ParentMenus
{ 0, OLED_ShowBattery, NullSubs, MainMenu, Null},
{ 2, OLED_ShowLock, NullSubs, MainMenu, Null},
{ 2, OLED_ShowTime, NullSubs, MainMenu, Null},
};
//——————————————————————————