我有一個非常奇怪的程序崩潰問題。
我有兩個相同的代碼「代碼A」和「代碼B」如下。
在「代碼B」中,我剛剛更改了變量聲明的順序。當變量聲明序列發生變化時程序崩潰了
/******** Code A ******/
void MyFunction(char * ONOFF_Flag)
{
short l_subchoice_s ;
char l_subchoice_ca[1] = {'\0'};
char l_ProcessName_ca[30];
char l_reply_c = '\0';
char l_Type_c = 'P';
char l_ProcessName1_ca[30];
char l_TCPIP_ca[30];
char l_TCPIP1_ca[30];
/*
Data Processing Logic
*/
}
/******** Code B ******/
void MyFunction(char * ONOFF_Flag)
{
char l_reply_c = '\0';
short l_subchoice_s ;
char l_subchoice_ca[1] = {'\0'};
char l_ProcessName_ca[30];
char l_Type_c = 'P';
char l_ProcessName1_ca[30];
char l_TCPIP_ca[30];
char l_TCPIP1_ca[30];
/*
Data Processing Logic
*/
}
/*數據處理邏輯如下*/
printf("I"); /* CLSCR */
printf("\t\t ONLINE PARAMETER READ MENU");
printf("\n\t\t ==================================\n");
printf("\n\t\t 1. Profile %s for one Server",ONOFF_Flag);
printf("\n\t\t 2. Profile %s for ALL Servers",ONOFF_Flag);
printf("\n\t\t 3. Return to Previous Menu");
printf("\n\n\t\t Enter choice : ");
scanf("%s",&l_subchoice_ca);
l_subchoice_s = (short) atoi(l_subchoice_ca);
switch(l_subchoice_s)
{
case 1:
AllorOneFlag ='O';
printf("\n\n\n\t\tEnter server name $");
scanf("%s",&l_ProcessName_ca);
sprintf(l_ProcessName1_ca,"$%s",l_ProcessName_ca);
memset(l_ProcessName_ca,'\0',strlen(l_ProcessName_ca));
strcpy(l_ProcessName_ca,l_ProcessName1_ca);
printf("\n\tDo you wish to do New Profile on/off the (Y/N)..? :");
scanf("%s",&l_reply_c);
while (l_reply_c != 'y' && l_reply_c != 'Y' &&l_reply_c != 'n' && l_reply_c != 'N')
{
printf("\n\t Invalid Choice; Press (Y/N) :");
scanf("%s",&l_reply_c);
}
if(l_reply_c == 'y' || l_reply_c == 'Y')
{
UpdateforOne(g_SystemNo_s, l_ProcessName_ca,l_Type_c);
}
break;
case 2:
AllorOneFlag ='A';
printf("\n\tDo you wish to update parameter of ALL Servers (Y/N)..? :");
scanf("%s",&l_reply_c);
while (l_reply_c != 'y' && l_reply_c != 'Y' &&l_reply_c != 'n' && l_reply_c != 'N')
{
printf("\n\t Invalid Choice; Press (Y/N) :");
scanf("%s",&l_reply_c);
}
if(l_reply_c == 'y' || l_reply_c == 'Y')
{
UpdateforAll(l_Type_c);
}
break;
case 4:
printf("I"); /* CLSCR */
break;
default:
printf("\n\n\n\tThis is not a valid choice ");
}
此代碼運行很長一段時間對我們的服務器,最近一些新的要求,我需要修改它。當我嘗試添加另一個類似功能的副本函數Myfunction()時,程序崩潰了。
我沒有收到任何編譯錯誤/警告。
當我使用「代碼A」編譯和運行程序時, 程序工作正常,但當使用「代碼B」編譯完成時,即更改變量聲明序列時,程序崩潰。
我試圖調試該問題,發現一些內存損壞的問題,但無法找到其根本原因。
另外這個崩潰是不統一的,相同的程序在一個系統上工作正常,並在另一個系統上崩潰。與2個不同登錄系統的情況也是如此。程序使用其他用戶進行編譯時使用一次登錄並崩潰。
這是字節對齊問題嗎?如果是的話,任何人都可以詳細解釋。
,我所面臨的問題,但 它工作正常的HP不間斷H系列系統我正在運行的HP不間斷G系列系統程序。
編譯用在G系列系統是「NMC」和H系列系統是「CCOMP」
只是一個猜測:你在函數中用'l_reply_c'做什麼?我假設問題不是聲明,而是在「數據處理邏輯」中。你可以發佈左邊的代碼嗎? – eckes
我們需要代碼。並且需要一個小例子來演示這個問題(www.sscce.org) –
毫無疑問,你的代碼正在破壞一些數據,但除非你顯示它,否則我們不能更具體。 –