c - 段错误且无输出

标签 c segmentation-fault

此代码的要点是让用户输入他们想要输入的 float 的数量。然后,他们进入所有的花车并对花车进行排序。最后,它打印结果。问题是,在输入浮点值后,我不断遇到段错误。我的代码中已经有库 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);
}    

最佳答案

这段代码:

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

未初始化数据数量传递到getData例程中,该例程继续尝试写入*data(这是一个单独的错误 - 它应该只是data)。

难怪程序崩溃了。

第一步,为编译器打开最大级别的警告(如果使用 GCC,请使用-Wall -Wextra),并修复全部警告。

关于c - 段错误且无输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680278/

相关文章:

c - 基本 C 指针

c - fread/ftell 显然在 Windows 下损坏,在 Linux 下工作正常

c - 我的合并排序有什么问题?

c - 使用字符串 C 程序/Popen 时出现段错误

C:线程程序如何在同一个单核上比非线程程序运行得更快?

c - 嵌套并行执行以使用 Cilk

c - 使用netfilter时如何从iph->frag_offset访问IP_DF和IP_MF

c++ - 段错误[二维数组]

c - 我在第 19 次运行 addNode 函数时遇到了 SegFault,但我不知道为什么

c - ubuntu 上的段错误,在 debian 上运行