Ошибка ошибки сегментации при попытке запустить эту программу - PullRequest
0 голосов
/ 19 февраля 2019
#include <stdio.h>
#include <stdlib.h>
#include "vettore.h"

int main(int argc, char *argv[]){
    if(argc != 5)
        printf("Incorrect parameters number\n");
    else{
        int n = atoi(argv[1]);
        int *a = (int*) calloc(n, sizeof(int));
        if(a == NULL)
            printf("Unsufficient memory\n");
        else{
            finput_array(argv[2], a, n);
            bubblesort(a, n);
            foutput_array(argv[4], a, n);
            int *oracle = (int*) calloc(n, sizeof(int));
            finput_array(argv[3], oracle, n);

            if(compare_array(a, oracle, n))
                printf("PASS\n");
            else
                printf("FAIL\n");
        }
    }
}

Я запускаю программу следующим образом: ./test_ordina_array.exe 12 TC4_input.txt TC4_oracle.txt TC4_output.txt, но она вызывает ошибку сегментации.

"TC4_output.txt" создается программой, в то время как два других файла уже существуют.

Используются следующие функции:

    void bubblesort(int a[], int n){
int i, j;
  for(i = 0 ; i < n - 1; i++)
  {
    for(j = 0 ; j < n - i - 1; j++)
    {
      if (a[j] > a[j+1]) /* For decreasing order use < */
      {
        swap(&a[j], &a[j+1]);
       }
      }
     }
}

void finput_array(char *file_name, int a[], int *n){
    FILE *fd = fopen(file_name, "r");
    if(fd == NULL)
        printf("Errore in apertura del file %s\n", file_name);
    else{
        int i = 0;
        fscanf(fd, "%d", &a[i]);
        while(i<*n && !feof(fd)){
            i++;
            fscanf(fd, "%d", &a[i]);
        }
        fclose(fd);
        if(i<*n)
            *n = i;
    }
}

void foutput_array(char *file_name, int a[], int n){
    int i;
    FILE *fd;

    fd = fopen(file_name, "w");
    if(fd == NULL)
        printf("Errore in apertura del file %s\n", file_name);
    else{
        for(i=0; i<n; i++)  
            fprintf(fd, "%d\n", a[i]);
        fclose(fd);
    }
}

int compare_array(int a[], int b[], int n){
    int i=0;

    while(i<n && a[i] == b[i])
        i++;

    return (i==n) ? 1 : 0;
}

Они содержатся в "vettore.c", а "vettore.h" содержит их прототипы.

Программа должна упорядочить по возрастаниюупорядочить элементы, содержащиеся в первом текстовом файле, и записать их в выходной файл.

1 Ответ

0 голосов
/ 19 февраля 2019

У вас проблема при использовании finput_array

finput_array(argv[2], a, n);

Пожалуйста, замените на

finput_array(argv[2], a, &n);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...