分段错误错误;绝对值表
Posted
技术标签:
【中文标题】分段错误错误;绝对值表【英文标题】:Segmentation Fault Error; Absolute Value Table 【发布时间】:2013-10-28 21:09:41 【问题描述】:一段时间以来,我一直在努力完成这项作业。而且我似乎找不到它有什么问题。
我的问题是为什么我每次执行这个程序时都会收到分段错误错误。
/* Description: A program that takes an input array argument with type double values and displays a table of those inputs and their absolute values.
*/
...
int main() /* Main Function */
/* Variables */
int size=5,n;
double value[n];
double table;
/* Instructions and Input */
for(n=0;n<size;n++)
printf("\nPlease enter value #%d:\n",n);
if(n=size-1)printf("\nPlease enter the last value.\n");
scanf("%lf",&value[n]);
/* Recalling the Function and Output */
printf("\nValue\t|Value|\n"); /* Table Header */
table=abs_table(value[n],size); /*Absolute Value Table */
return 0;
double abs_table(double value, int size) /* Absolute Value Function */
int i,j; /* Counter Variables */
double v;
for(j=1;j<=size;j++) /* For the Number of rows */
for(i=0;i<=size;i++) /* For the number of columns */
v = abs(value); // For the absolute values */
printf("\n%g\t%g\n",value,v);
printf("\n"); /* To make sure the rows display on their own line */
return;
【问题讨论】:
double value[n];
n
未初始化,因此未定义。它甚至不应该被允许编译,在任何情况下,启用编译器警告(-Wall
用于 GCC)。
漏洞,漏洞无处不在。
解决所提出的唯一问题,因为由于局部变量中的不确定值,您正在调用未定义的行为。
非常感谢您的反馈!
【参考方案1】:
您的代码中有几个错误:
Error1: 在 main() 你声明double value[n];
我相信你想要的是double value[size];
Error2:在 main() 语句中 if(n=size-1)
应更改为 if(n==size-1)
Error3:在 main() 中调用函数 table=abs_table(value[n],size);
它应该是 table=abs_table(value,size);
错误4:你定义函数double abs_table(double value, int size)...
它应该是double abs_table(double value[], int size)...
Error5: inside function abs_table
我实际上不知道你想在这里显示什么。一个地方是变量 i
应该从 0 运行到 size-1,另一个地方是你应该返回一些东西
【讨论】:
他没有在abs_table
中使用value
作为数组,所以在技术上接受并传递一个(正常的)double
并没有错。
你可能是对的,Kninnug。这完全取决于他。根据abs_table
函数内的for
循环,我猜他实际上想将一个数组传递给它【参考方案2】:
你的程序中有很多错误:
-
无法用可变长度初始化数组
n
:double value[n];
。
if(n=size-1)
中缺少另外一个 =
。
即使您使用长度 n
(第 1 点)正确初始化数组,scanf("%lf",&value[n]);
也会写入超出 value
数组长度的内存位置。
abs
编码为整数而非双精度:v = abs(value);
。
...可能还有一些错误,但列表已经很长了。
【讨论】:
我认为他不想打印n
的地址,所以不需要&符号。
确实是我的错。已删除。【参考方案3】:
在main
中声明int n
而不初始化它,随后声明double value[n]
。因此n
具有未定义的值,因此value
的大小未定义。我认为您的意思是声明 double value[size]
,您确实已对其进行了初始化。
另外,abs_table
应该返回 double
,但你返回的是 void。
【讨论】:
以上是关于分段错误错误;绝对值表的主要内容,如果未能解决你的问题,请参考以下文章