为什么我在这里遇到分段错误(C)

时间:2013-11-16 00:32:54

标签: c arrays segmentation-fault

我一直在线阵[j] = array [j] +1中得到分段错误。 我已经包含了用于调用“模式”的主要功能部分,这是我遇到麻烦的功能。该程序应该以字符串的形式接受用户输入。根据字符串的含义,函数可以执行不同的操作。对于输入“模式”,它从用户获取一个数组,然后找到最常出现的模式或数字。该计划可能不是最干净或最有效的,但我只需要它工作。谢谢你的帮助。

int mode(int input[]){
int array[30]={0},i=0,j=0,i2=0,j2=0;

while (input[i]!='\0'){
    j=input[i];
    array[j]=array[j]+1;
    i++;
    }

while (array[i2]!='\0'){
    if (array[i2]>j2){
        j2=array[i2];
        i2++;
    }
    else{
    i2++;
    }
}
return j2;
}


int main(){
char function_called[7];
int nums_for_mode[50],num_for_primes;
int num1,den1,num2,den2;


printf("Please choose a function (mode, primes, or fradd): ");
scanf("%s",&function_called);

if(strcmp(function_called, "mode")==0){
printf("\nPlease provide numbers between 1 and 30: ");
scanf("%i",&nums_for_mode);
printf("\nThe mode is %i\n",mode(nums_for_mode));
}

1 个答案:

答案 0 :(得分:0)

nums_for_mode未初始化,您也不会终止它。

在main的顶部附近,将nums_form_mode的每个成员设置为0:

    for(int a = 0; a < 50; a++)
            nums_for_mode[a] = 0;

或者,在声明点用= {0}初始化它。修复这个会停止你的段错误,但程序仍然是错误的:

  • 您还应该循环获取数字,目前,您的程序实际只收到一个数字。

  • 数组[30]很容易溢出,包括输入30.你应该至少延长一次,并在阅读时检查输入是否实际在范围内。

    < / LI>
  • function_called缓冲区太小而且容易溢出,你应该在scanf调用中限制输入的大小。

  • 这一行:while (array[i2]!='\0')没有太大的逻辑意义,它会提前终止而不会实际检查输入。

相关问题