分段故障核心转储在 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 中的主要内容,如果未能解决你的问题,请参考以下文章