分段错误:错误代码11

时间:2015-02-25 18:40:07

标签: c

该程序在Yostemite上生成Segmentation fault:11,

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

int main (){

unsigned long long int inputNumber[99]={0};
int i = 0;

unsigned long long int input= 0;
scanf("%llu", &input);


while( input != EOF ){
        inputNumber[i] = input;

/ **在使用gdb进行调试时,它给出: 程序收到信号SIGBUS,总线错误。 在上面。 * /             我++;     };

for( ; i > 0; i--){
    printf("%.4f\n", sqrt(inputNumber[i]));
}

return 0;
}

2 个答案:

答案 0 :(得分:1)

你的scanf调用不在循环中,所以这会永远运行然后超出数组缓冲区:

while( input != EOF ){
        inputNumber[i] = input;
        i++;
};

更改为:

while( input != EOF ){
        inputNumber[i] = input;
        i++;
       scanf("%llu", &input);
};

答案 1 :(得分:1)

正如ouah在评论中提到的,你有一个无限循环。永远不会消耗Input - 将一个值复制到inputNumber的每个元素中都很简单。由于输入值随时间保持不变,它永远不会等于EOF,循环将永远不会结束(除非用户只输入表示EOF的值)。因此,您试图将值input写入inputNumber数组中越来越高的无限级数,超出数组范围。

也许你想在循环中移动scanf?

编辑:另外,我不太确定你要做什么,如果你试图按字符读取数字(“逐位数”)并将其存储在数组中,你可以使用getchar函数执行此操作,该函数将逐个字符地返回缓冲输入(即,按Enter后的标准输入)作为char数据类型。在这种情况下,您的inputNumber数组必须是一个char数组,并且您必须将其解析为带有一些代码的整数。再次,不确定这是否是你想要做的,但我想我会提到它。