标题:写的一个练习程序,Segmentation fault
只看楼主
gleerat
Rank: 2
等 级:论坛游民
帖 子:39
专家分:20
注 册:2009-12-23
结帖率:100%
已结贴  问题点数:20 回复次数:2 
写的一个练习程序,Segmentation fault
程序代码:
程序代码:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 *求方差,公式为[(x1-y)^2+(x2-y)+……]/n,其中xi为所求方差的数字,y为平均值,n为

 *所求方差的数字的个数

 *要求是输入整形数,返回整形数

 */
#include <stdio.h>
#include <math.h>

//int function(int *calculate[],int arrayLen);

int main(void)
{
    int calculate[3]={1,2,3};
    int arrayLen=3;
   

    printf("%d\n",function(calculate[3],3));
}

int function(int calculate[],int arrayLen)
{
    int i;
    float sum,average,square,square_average;
   

    for(i=0;i<arrayLen;i++)
        sum+=calculate[i];
    average=sum/arrayLen;
    for(i=0;i<arrayLen;i++)
        square_average+=((float)calculate[i]-average)
                         *((float)calculate[i]-average);
   

    return (int)square_average/arrayLen;
}
在不注释main函数前的function函数声明时,会出现问题:
[zhuqx_hp@node1 test]$ gcc huawei.c -o huawei
huawei.c: In function `main':
huawei.c:16: warning: passing arg 1 of `function' makes pointer from integer without a cast
huawei.c: At top level:
huawei.c:20: error: conflicting types for 'function'
huawei.c:9: error: previous declaration of 'function' was here
huawei.c:20: error: conflicting types for 'function'
huawei.c:9: error: previous declaration of 'function' was here
huawei.c:32:2: warning: no newline at end of file
[zhuqx_hp@node1 test]$
注释掉function函数的声明之后就好了。
这是怎么回事呢?请教大家给予解释。
但是编译的时候会提示段错误
[zhuqx_hp@node1 test]$ gcc huawei.c -o huawei
huawei.c:32:2: warning: no newline at end of file
[zhuqx_hp@node1 test]$ gcc huawei.c -o huawei
[zhuqx_hp@node1 test]$ ./huawei
Segmentation fault
请教各位,这是怎么回事,应该怎么解决呢?
谢谢各位。
搜索更多相关主题的帖子: 整形 function 平均值 
2011-12-23 14:18
hengde_li
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:131
专家分:178
注 册:2010-1-15
得分:10 
楼主的英语比较烂而已,提示很明显了。重复定义了。和函数参数传递类型不符
2011-12-23 15:05
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:10 
回复 楼主 gleerat
第一个问题二楼说对了,第二个问题是因为这句
printf("%d\n",function(calculate[3],3));
数组calculate只有三个元素,数组下标顶多到2,你传3就越界了。还有请分清编译错误和运行错误

总有那身价贱的人给作业贴回复完整的代码
2011-12-23 15:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-358462-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023924 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved