c - 为什么这个程序会崩溃?

标签 c crash physics

我需要运行它,以便我可以分析实验室中的一些数据。但是,当程序运行并且我键入“n”的值时,它就会崩溃。有关如何纠正此问题的任何提示吗?

谢谢,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main()
{
  FILE *magfield;
  FILE *means;
  FILE *variances;
  double *mean;
  double *variance;
  double field[12000];
  double time[12000];
  double sum=0, squares=0;
  int i, j=0, k=0, l=0, n=0;
  magfield=fopen("C:\\Users\\Owner\\Documents\\Homework\\ILab\\magneticfield.txt","r");
  means=fopen("C:\\Users\\Owner\\Documents\\Homework\\ILab\\means.txt","w");
  variances=fopen("C:\\Users\\Owner\\Documents\\Homework\\ILab\\variances.txt","w");

  for (i=0;i<12000;i++)
  {
       fscanf(magfield,"%f %f", &time[i], &field[i]);
       //printf("%f %f\n", time[i], field[i]);
  }

  printf("How many data points would you like to be analyzed at a time?\n");
  scanf("%i", &n);

  mean=(double*)calloc(n,sizeof(double));
  variance=(double*)calloc(n,sizeof(double));

  for (i=0;i<12000;i+=n)
  {
      for(j=i;j<n;j++)
      {
          sum+=field[j];
          squares+=field[j]*field[j];
      }
      mean[k]=sum/n;
      variance[k]=squares/n-(mean[k]*mean[k]);
      fprintf(means,"%f\n", mean[k]);
      fprintf(variances,"%f\n", variance[k]);
      sum=0;
      squares=0;
      k++;
  }
  free(mean);
  free(variance);
  printf("Press enter to continue...\n");
  getch();  
  return 0;
}

最佳答案

我建议#include <assert.h>assert(magfield != NULL); assert(means != NULL); assert(variances != NULL);在你的fopen之后。此外,您可能应该assert(fscanf(...) == 2);assert(scanf(...) == 1); 。这些是调试辅助工具:如果出现任何失败,您就会知道这是由于文件丢失或意外输入造成的。 assert(mean != NULL); assert(variance != NULL);以确保这些分配成功。您可以使用哪个断言来确保 k 始终小于 n?当 k 是均值或方差的无效索引时,如何确保不会访问均值[k] 或方差[k]?

this page 是什么意思?告诉你 %f 的类型格式说明符处理什么? &time[i]是什么类型和&field[i] ?这些问题的答案应该相同,否则您将处理未定义的行为。

当您可以使用标准 stdio.h 中的可移植 getchar 来达到相同目的时,为什么要使用非标准 conio.h 中的非可移植 getch?

关于c - 为什么这个程序会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14970448/

相关文章:

c - 如何在 C 中创建一个交互式菜单,无需重绘菜单即可从一个功能移动到另一个功能

c - 服务器不接收来自客户端的数据

c++ - 如何获得调用堆栈回溯? (深度嵌入,无库支持)

python-3.x - 如何以科学计数法计算和存储数字?

html - 使用传感器改变物理引擎中的重力

c++ - GCC 不会删除未使用的函数

python - PyGame 游戏在某个地方崩溃 [完成]

c - 为什么这段代码能够访问空指针而不会导致崩溃?

java - Mediarecorder.start() 不会在 oncreate 上工作

wolfram-mathematica - 如何在 Mathematica 中模拟多个点电荷(滚珠轴承)之间的排斥力?