Ошибка сегментации - 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));
Объяснение кода листинга программы
- В данном коде выделяется память под массив типа double с помощью функции malloc.
- Размер массива определяется переменной n, которая содержит количество элементов, которые необходимо разместить в массиве.
- В функции malloc используется оператор sizeof для определения размера памяти, которую необходимо выделить под каждый элемент массива. В данном случае, размер памяти определяется как двойное слово (int), что может вызвать ошибку сегментации при попытке чтения или записи данных, так как тип double требует больше памяти для своего представления.