使用数组分割错误11

时间:2018-11-21 22:45:10

标签: c arrays malloc

我是一名编码初学者,可以编译我的代码,但是当我输入整数时,会遇到分段错误。请帮忙。

问题是:我需要首先获得多少学生,然后下一个输入将是这些学生的分数。因此,如果输入3,则下一个输入应该是3个学生中的3个分数。然后输入应该是g(girl)或b(boy)。从那里,如果是男孩,我需要总结所有的奇数。

这是我的代码:

#include<stdio.h>
#include<stdlib.h>

int marks_summation(int* marks, int number_of_students, char gender){

    int i=0, sum=0;
    int marksforGirls=0, marksforBoys=0;
    char g;

    for(marks = 0; *marks <= number_of_students; marks++){
        if(gender == g){
            do{
                if(marks[i]%2 == 0){
                    marksforGirls = marks[i];
                    i++;
                    sum += marksforGirls;
                }
            } while(*marks<=number_of_students);
        }
        else{
            do{
                if(marks[i]%2 != 0){
                    marksforBoys = marks[i];
                    i++;
                    sum += marksforBoys;
                }
            } while (*marks<=number_of_students);
        }
    }
    return 0;
}


int main(){

    int i=0, number_of_students=0;
    int *marks=0;
    int sum=0;
    char gender;

    scanf("%d",&number_of_students);

    marks = (int*)malloc(number_of_students * sizeof(int));

    for(i=0; i<number_of_students; i++){
        scanf(" %d", &marks[i]);//for every marks put in, it will go into marks
    }

    scanf("%c",&gender);

    marks_summation(marks, number_of_students, gender);

    printf("%d", sum);

    free(marks);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

以下行没有做您可能认为的事情:

for(marks = 0; *marks <= number_of_students; marks++)

我相信您希望使用索引来访问每个mark元素。

答案 1 :(得分:0)

正如其他人指出的那样,问题出在for循环中。除了指针错误之外,循环条件也错误。此外,您的函数不会返回任何内容。而且,您的两个do-while循环都是无限循环。

尝试一下:

int mark_sum(int *marks, int number_of_students, char gender){
  int sum = 0;
  for(int i = 0; i < number_of_students; ++i){
    if(gender = 'g'){
      if(marks[i] % 2 == 0)
        sum += marks[i];
    } else {
      if(marks[i] % 2 != 0)
        sum += marks[i];
    }
  }
  return sum;
}

此外,主要来说,您实际上需要存储该函数返回的值:

int sum = mark_sum(marks, number_of_students, gender);