Ошибка сегментации без выхода - PullRequest
0 голосов
/ 06 октября 2018

Смысл этого кода заключается в том, что пользователь вводит количество, которое он хочет ввести.Затем они входят во все поплавки и сортируют поплавки.Наконец, он печатает результаты.Проблема в том, что я продолжаю получать ошибку сегментации после ввода значений с плавающей точкой.У меня уже есть библиотеки stdio.h и string.h в коде.Они просто не показаны здесь.Спасибо!

int  quantity();
void getData(float *dataStart, int quantity);
void sortData(float *dataStart, int quantity);
void printData(float *dataStart, int quantity );
float sumData(float *dataStart, int quantity);
void total(float total);

int main()
{
   int quantity;
   float *data;

   {
      getData(data, quantity);
      sortData(data, quantity);
      printData(data, quantity);
      printTotal(sumData(data, quantity));

      free(data);
   }
   return 0;
}

int quantity()
{
   int choice;

   do
   {
      printf("\nHow many data values are there (2 to 200, 0=quit): ");
      scanf ("%d", &choice);
   }
   while((choice < 2 || choice > 200) && choice != 0);
   return choice;
}

void getData(float *dataStart, int quantity)
{
   float *data;

   for(data = dataStart; (data - dataStart) < quantity; data++)
   {
      printf("Enter data value %f: ", *data);
      scanf("%f", data);

   }
   return;
}

void sortData(float *dataStart, int quantity)
{
   float *data,
         *sort, 
         *sortStart,          
         *biggest;    

   for(sort = sortStart; (sort - sortStart) < quantity; sort++) 
   {
      *sort = 0.0f;
      for(data = dataStart; (data - dataStart) < quantity; data++)
      {
         if(*data >= *sort)
         {
            *biggest = *data;
            *sort    = *biggest;
         }
      *biggest = 0.0f;
      }
   }
   memcpy(data, sort, sortStart);     

   free(sort);

   return;
}

void printData(float dataStart, int quantity)
{
   float data;

   for(data = dataStart; (data - dataStart) < quantity; data++)
   {
      printf("                     %.2f", *data);
   }

   return;
}
float sumData(float *dataStart, int quantity)
{
   float *data,
         dataTotal = 0;

   for(data =  dataStart; (data - dataStart) < quantity; pdata++)
       dataTotal += *data;
   return dataTotal;
}
void print total(float total)
{
    printf("The total is : %.2f", total);
}    

1 Ответ

0 голосов
/ 06 октября 2018

Этот код:

int quantity;
float *data;
{
  getData(data, quantity);

Пропускает неинсталлированные data и quantity в подпрограмму getData, которая пытается выполнить запись в *data (чтоотдельная ошибка - это должно быть просто data).

Неудивительно программа вылетает.

Первый шаг, включить максимум уровень предупреждений для вашего компилятора (используйте -Wall -Wextra при использовании GCC) и исправьте все предупреждения.

...