#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
没有被调用。我尝试过改变很多东西,却无法让它发挥作用。
答案 0 :(得分:1)
崩溃最有可能发生在这里:
repLetters[((letters1[i]) - 97)] +=1;
如果letters1
不包含26个字符,该怎么办?您现在正在访问一个超出范围的数组。
唯一可以确定的方法是在调试器中运行程序(当你遇到崩溃时,总是应该这样做。)