分段故障核心转储在 Hermite 中

Posted

技术标签:

【中文标题】分段故障核心转储在 Hermite 中【英文标题】:segmentation fault core dumped in 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 个输入? 【参考方案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 为您的阵列预留空间。

【讨论】:

以上是关于分段故障核心转储在 Hermite 中的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套在向量中的向量转储的分段故障核心

分段故障核心转储错误

分段故障核心转储...?

C - 分段故障(核心转储)

python OpenCV分段故障(核心转储)

Centos docker容器因6分段故障而崩溃 - 这是核心转储