分段错误错误;绝对值表

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",&amp;value[n]); 也会写入超出 value 数组长度的内存位置。 abs 编码为整数而非双精度:v = abs(value);。 ...可能还有一些错误,但列表已经很长了。

【讨论】:

我认为他不想打印n 的地址,所以不需要&符号。 确实是我的错。已删除。【参考方案3】:

main 中声明int n 而不初始化它,随后声明double value[n]。因此n 具有未定义的值,因此value 的大小未定义。我认为您的意思是声明 double value[size],您确实已对其进行了初始化。

另外,abs_table 应该返回 double,但你返回的是 void。

【讨论】:

以上是关于分段错误错误;绝对值表的主要内容,如果未能解决你的问题,请参考以下文章

将 vector<string> 转换为 char** 会导致分段错误

相对路径绝对路径

什么相对路径?什么是绝对路径?

PySpark:列的绝对值。类型错误:需要浮点数

无法设置 gdb 断点

如何解决分段错误单链表?