簡體   English   中英

增強2D數組值使程序崩潰

[英]Augmenting 2D array value crashes program

我正在C語言中創建一個字母頻率計數器,該計數器跟蹤一個給定字符串中一個字符使用了多少次。 當程序循環遍歷每個字符時,一個2d數組會跟蹤數據:

char* input = "The cat jumped over the fence";
int inputlength = (int) strlen(input);

//keeps track of how many times each character is used
int letterfrequencies[26][2] = {
    {'a',0},
    {'b',0},
    {'c',0},
    {'d',0},
    {'e',0},
    {'f',0},
    {'g',0},
    {'h',0},
    {'i',0},
    {'j',0},
    {'k',0},
    {'l',0},
    {'m',0},
    {'n',0},
    {'o',0},
    {'p',0},
    {'q',0},
    {'r',0},
    {'s',0},
    {'t',0},
    {'u',0},
    {'v',0},
    {'w',0},
    {'x',0},
    {'y',0},
    {'z',0}
};
int currentchar=0;
int letternum=0; //character position in char counting array
for (int i=0; i<inputlength; i++) {
    currentchar=input[i];
    letternum=0;
    while (currentchar!=letterfrequencies[letternum][0]) {
        letternum++;
    }
    printf(" Found a character ");
    letterfrequencies[letternum][1]++; //Add to char counting array
    printf("\n");
}

在循環的第一次迭代中(我使用帶有斷點的xCode調試器),一切都按預期進行。 但是,在第一次迭代之后,該行:

letterfrequencies[letternum][1]++;

使程序崩潰,並說線程1:EXC_BAD_ACCESS(代碼= 2,地址= 0x7fff5fc2e84c)。 如果我注釋掉該行,一切都會順利進行。 是什么原因造成的?

輸入語句包含大寫和小寫字母以及空格,但是您的letterfrequencies數組僅包含小寫字母。 所以,想想當你有一個大寫字母或空格會發生什么,搜索它,它不會被發現,因此while就繼續出去導致未定義行為的數組的邊界。

使用isspace功能檢查空間,並使用tolower capical字母轉換為小寫字母。

處理空格字符時出現問題,應檢查字符是否為(小寫)字母。


附帶說明一下,您不需要二維數組即可存儲字母的頻率。 而是使用:

int letterfrequencies[26] = {0};

假設字母為currentchar ,則遞增letterfrequencies[currentchar - 'a'] 例如,如果字母為'z' ,則letterfrequencies[25]會增加,因為'z' - 'a'25

變量letternum大於25 ...因為您在輸入中有例如“ T”,然后您在while循環字符中進行比較...因此它將字符轉換為代碼,因此它看起來像while(84 == 97)等。 在ASCII代碼中,有小寫和大寫字母的代碼。

而且您那里沒有空間''最多有一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM