总线错误:10。编译时没有错误

时间:2016-03-14 02:22:58

标签: c macos unix bus-error

所以基本上当我用GCC编译器编译代码时,我没有得到任何错误或警告,但是当我输入第一段数据时,它说:

Bus error: 10.

我不确定我做错了什么。我认为这个问题来自void anagramGrouping(最后一个函数)。我还包括其余代码以帮助遵循逻辑。

#include <stdio.h>
#include <string.h>

#define Row 2
#define col 20

int wordCount = 0;
int groupCount = 0;
char wordList[Row][col];
char group[Row][col];

// this is where prototypes go
void sortword(char word[col]);                 
void anagramGrouping(char word[col], char copy[col]);   
void resetGroup();                                   

int main() {
    int i; // used in for loop to 'get' the strings 
    char word[col];

    resetGroup();

    for (i = 0; i < Row; i++) {
        scanf("%s", word);
        sortword(word);
        wordCount++;
    }
}

void resetGroup() {
    int i;

    for (i = 0; i < Row; i++)
        strcpy(group[i], " ");
}

void sortword(char word[col]) {
    int i = 0; 
    char temp;
    char copy[col]; // used to store a copy of the original word

    strcpy(copy, word);

    while (word[i] != '\0') {
        int j = i + 1;

        while (word[j] != '\0') {
            if (word[j] < word[i]) {
                temp = word[i];
                word[i] = word[j];
                word[j] = temp;
            }
            j++;
        }
        i++;
    }
    anagramGrouping(word,copy);
}

void anagramGrouping(char word[col], char copy[col]) {
    int n;

    if (wordCount == 0) {
        strcpy(group[0], copy);
    }

    for (n = 0; n <= groupCount; n++) {
        if (strcmp(group[n], word) == 0) {
            strcpy(group[n], copy);
        } else {
            groupCount++;
            strcpy(group[groupCount], copy);
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

对于初学者,请更改所有

sortword (char word[col])

sortword (char *word)

和所有

anagramGrouping (char word[col], char copy[col]) 

anagramGrouping (char *word, char *copy)

当您传递char copy[col]时,您传递的是character array,当作为函数参数传递时,会转换为指针。 (你会听到短语“衰变到一个指针”,这不完全正确,但经常被用来表示同样的事情)。这不是导致bus error的问题,但会使您的代码更具可读性。

接下来,您的bus error通常是由于滥用指针值而导致该值超出程序允许的内存范围,通常位于 system 区域导致bus error。查看代码,很难分清哪些问题可能是确切的原因。然而,可能的罪魁祸首是:

for(n=0; n <= groupCount; n++)
{
    if ( strcmp(group[n],word) ==0 )
    {
        strcpy(group[n],copy);
    }
    else
    {
        groupCount++;
        strcpy(group[groupCount],copy);
    }
}

在运行调试器的情况下,您会很快发现groupCount远远超过1,导致strcpy(group[groupCount],copy)超出char group[Row][col];的末尾。允许的行值限制为0-1的{​​{1}}。

要将副本限制在允许的范围内,请将循环条件更改为:

#define Row 2

进一步清理代码可能如下所示:

for (n = 0; n < Row; n++) {

如果您有任何问题,请与我们联系。