Ошибка сегментации - C (СИ) (148826)

Узнай цену своей работы

Формулировка задачи:

Задача: В двух файлах дано 2 массива. Вывести эти 2 массива в третий файл в отсортированном виде. После ввода названий файлов выдает ошибку сегментации. В чем может быть проблема?
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void Sort(double *num, int size) {
  int i, j, temp;
  for (i = 0; i < size; i++) {
    for (j = (size - 1); j > i; j--) {
      if (num[j-1] > num[j]) {
        temp = num[j-1];
        num[j-1] = num[j];
        num[j] = temp;
      }
    }
  }
}
int main(void) {
    FILE *in1, *in2, *out;
    int n1=0, n2=0;
    double *a;
    double m;
    int i;
    double r;
    int n=0;
    char s1[100], s2[100], s3[100];
    printf("Name1: \n");
    scanf("%s",s1);
    printf("Name2: \n");
    scanf("%s",s2);
    printf("Name3: \n");
    scanf("%s",s3);
    in1=fopen(s1,"r");
    in2=fopen(s2,"r");
    out=fopen(s3,"w");
 
    if((in1==NULL)||(in2==NULL))
    {
      printf("error");
      fclose(in1);
      fclose(in2);
      return -1;
    }
 
    if((fscanf(in1,"%lf",&r))!=1){
    printf("error");
    fclose(in1);
    return -2;
    }
    else n1++;
    if((fscanf(in2,"%lf",&m))!=1){
      printf("error");
    fclose(in2);
    return -3;
    }
    else n2++;
    while(!feof(in1))
    {
        fscanf(in1,"%lf",&r);
        n1++;
    }
    while(!feof(in2))
    {
        fscanf(in2,"%lf",&r);
        n2++;
    }
    n=n1+n2;
    a = (double*)malloc(n*sizeof(int));
    for (i=0; i<n1; i++){
    fscanf(in1, "%lf", &r);
    a[i]=r;
    }
    for (i=n1; i<n; i++){
    fscanf(in2, "%lf", &r);
    a[i]=r;
    }
    Sort(a, n);
    for (i=0; i<n; i++){
      printf("%lf\n", &a[i]);
      fprintf(out, "%lf\n", &a[i]);
     }
     fclose(in1);
     fclose(in2);
     fclose(out);
     return 0;
}

Решение задачи: «Ошибка сегментации»

textual
Листинг программы
a = (double*)malloc(n*sizeof(int));

Объяснение кода листинга программы

  1. В данном коде выделяется память под массив типа double с помощью функции malloc.
  2. Размер массива определяется переменной n, которая содержит количество элементов, которые необходимо разместить в массиве.
  3. В функции malloc используется оператор sizeof для определения размера памяти, которую необходимо выделить под каждый элемент массива. В данном случае, размер памяти определяется как двойное слово (int), что может вызвать ошибку сегментации при попытке чтения или записи данных, так как тип double требует больше памяти для своего представления.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5