为什么这个简单的C代码会给出Bus错误?

时间:2013-04-04 03:54:09

标签: c

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <math.h>

// Here i declared global variables.
int repLetters[26];
char* letters1;

static void makeRepLetters()
{
    printf("enter makeRep");
    int i =0;
    for(;i<26;i++)  
        repLetters[i] =0;
    for(i=0;i<26;i++) {
        repLetters[((letters1[i]) - 97)] +=1; 
    }
}      

int main(int argc, char *argv[])
{
    int i=0,num =10;
    if(argc != 2) {
        printf("Usage: %s <letters>\n", argv[0]);
        return 1;
    }
    //letters1 = (char*)malloc(sizeof(char)* strlen( argv[1]));
    //strcpy(letters1,argv[1]); 
    letters1 = argv[1];
    printf("\n letters1 = %s",letters1);
    scanf("%d",&num);
    printf("\ncheck test\n");

    makeRepLetters();
    for(i=0;i<26;i++)
        printf("\n %c occured %d tyms",i+97,repLetters[i]);
    return 0;
}

打印“检查测试”后,出现总线错误。 makeRepLetters没有被调用。我尝试过改变很多东西,却无法让它发挥作用。

1 个答案:

答案 0 :(得分:1)

崩溃最有可能发生在这里:

repLetters[((letters1[i]) - 97)] +=1;

如果letters1不包含26个字符,该怎么办?您现在正在访问一个超出范围的数组。

唯一可以确定的方法是在调试器中运行程序(当你遇到崩溃时,总是应该这样做。)