我通過menu_items數組的地址到功能初始化指向類型STRUCT分割錯誤的陣列,使得在主
int main(int argc, char * argv[])
{
struct vm vm;
struct menu_item menu_items[NUM_MENU_ITEMS];
initialize(&vm, argc, argv, &menu_items);
exit(EXIT_SUCCESS);
}
在功能初始化我請menu_init(我已經刪除不必要的行)
BOOLEAN initialize(struct vm * vm, int argc, char * argv[], struct menu_item (* menu_items)[])
{
menu_init(menu_items);
}
和這裏的menu_init
void menu_init(struct menu_item (* menu_items)[NUM_MENU_ITEMS])
{
int i;
static struct menu_item menuTable[] = {
{ "Display Items", &displayItems },
{ "Purchase Items", &purchaseItems },
{ "Save and Exit", &saveExit },
{ "Add Item", &addItem },
{ "Remove Item", &removeItem },
{ "Display Coins", &displayCoins },
{ "Reset Stock", &resetStock },
{ "Reset Coins", &resetCoins },
{ "Abort Program", &abortProgram }
};
for (i = 0; i < NUM_MENU_ITEMS; i++) {
strcpy((*menu_items[i]).name, menuTable[i].name);
(*menu_items[i]).func = menuTable[i].func;
}
}
結構MENU_ITEM看起來是這樣的
struct menu_item
{
char name[ITEM_NAME_LEN+1];
menu_ptr func;
};
奇怪的是這個工作對我的家用電腦,但得到我的UNI的服務器上分割故障。有任何想法嗎?
'(* menu_items [1])'===>'(* menu_items )[I]'。除非'menuTable'與'NUM_MENU_ITEMS'大小相同*或*大於'',否則您將從未定義的內存空間讀取數據,並使用該循環調用未定義的行爲。 – WhozCraig 2014-10-08 06:19:40
可以請你粘貼整個程序,因爲它是。它有助於分析程序。 – Ajay 2014-10-08 06:19:54