【问题标题】:segmentation fault core dumped in hermite分段故障核心转储在 Hermite 中
【发布时间】:2014-10-29 13:30:19
【问题描述】:
#include<stdio.h>

int main()
{
  int n, i, j;
  float x[10] = { 0 }, fx[10] = { 0 }, f1x[10] = { 0 }, z[20] = { 0 }, q[20][20] = { 0 };

  printf("Enter the number of initial values\n");

  scanf("%d", &n);

  printf("Enter the x values\n");

  for (i = 0; i < n; i++);

  scanf("%f", &x[i]);

  printf("Enter the fx values\n");

  for (i = 0; i < n; i++);

  scanf("%f", &fx[i]);

  printf("Enter the f1x values\n");

  for (i = 0; i < n; i++);

  scanf("%f", &f1x[i]);

  for (i = 0; i < n; i++)
  {
    z[2 * i] = x[i];

    z[(2 * i) + 1] = x[i];

    q[2 * i][0] = fx[i];

    q[(2 * i) + 1][0] = fx[i];

    q[(2 * i) + 1][1] = f1x[i];

    if (i != 0)
    {
      q[2 * i][1] = (q[2 * i][0] - q[(2 * i) - 1][0]) / (z[2 * i] - z[(2 * i) - 1]);
    }
  }
  for (i = 2; i < (2 * n) + 1; i++)
  {
    for (j = 2; j < i; i++)
    {
      q[i][j] = (q[i][j - 1] - q[i - 1][j - 1]) / (z[i] - z[i - j]);
    }
  }
  printf("\nthe resultant matrix is\n");
  for (i = 0; i < (2 * n) + 2; i++)
    printf("   %f   ", q[i][i]);
}

当我运行程序并获取初始值的数量(比如 3)然后它要求 1 x 然后要求 fx 和 f1x 并给出分段错误 .

【问题讨论】:

  • 请格式化代码。然后使用调试器单步执行程序以找出错误语句。
  • 您应该注意;for 循环的末尾; (即)删除;
  • 我删除了;在for循环中..问题仍然存在
  • 所以更新您的帖子以反映这一点。当你在做的时候,把缩进改成理智和可读的东西。
  • 是的,但为什么它不接受我的其余 2 个输入?

标签: c segmentation-fault coredump


【解决方案1】:

你在内部循环中有一个错误的增量值:

for (i = 2; i<(2 * n) + 1; i++)
{
    for (j = 2; j<i; i++) <- this should be j

从而访问超出范围的内存。

【讨论】:

    【解决方案2】:

    如果您在选择/循环语句后使用正确的缩进、代码格式并始终使用大括号,您很快就会发现问题在于您在每个 for 循环后键入的分号。

    【讨论】:

      【解决方案3】:

      这根本不安全:

      int n;
      float x[10];
      
      printf("Enter the number of initial values\n");
      scanf("%d",&n);
      
      printf("Enter the x values\n");
      for(i=0;i<n;i++)
      {
          scanf("%f",&x[i]);
      }
      

      如果用户为n 输入50,您的循环中将出现分段错误,因为x 只有10 值的空间。您应该考虑使用malloc 为您的阵列预留空间。

      【讨论】:

        猜你喜欢
        • 2016-09-09
        • 2014-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多