鱼C论坛

 找回密码
 立即注册
查看: 961|回复: 1

[已解决]编译成功了,但是执行了程序停止工作

[复制链接]
发表于 2020-2-28 13:49:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdarg.h>

int sum(int n, ...);

int sum(int n, ...)
{
        int i,sum = 0;
        va_list vap;//定义了列表的名称 
        
        va_start(vap,n);//a是列表名称 ,n是第一个数据 
        for (i=0;1<n;i++)
        {
                sum += va_arg(vap,int);//定义数据类型 
        }
        va_end(vap);
        
        return sum;
}
//格式:sum(参数个数,参数,参数……) 
int main( )
{
        int result;
        
        result = sum(3,1,2,3);
        printf("1 2 3 = %d",result);
        
        return 0; 
}

程序编译成功的,但是会停止工作?什么情况?
最佳答案
2020-2-29 14:24:03
本帖最后由 major_lyu 于 2020-2-29 14:28 编辑

有问题调试一下,跟踪一下变量啊。

你这代码运行结果是:输出“Segmentation fault“或者是”段错误“吧,然后程序就终止了吧。

一般情况出现“段错误(Segmentation fault)”的原因都是访问越界,就是你访问了没有访问权限的内存地址。
具体错误看注释:
#include <stdio.h>
#include <stdarg.h>

int sum(int n, ...);

int sum(int n, ...)
{
        int i,sum = 0;
        va_list vap;//
        
        va_start(vap,n);
        //for (i=0;1<n;i++) // 1<n???,只要参数n大于1, for循环就是个死循环,直到访问到别的数据段内存,产生段错误,程序退出。
        for (i=0; i<n; i++)
        {
                sum += va_arg(vap,int);
        }
        va_end(vap);
        
        return sum;
}
//格式:sum(参数个数,参数,参数……) 
int main( )
{
        int result;
        
        result = sum(3,1,2,3);
        printf("1 2 3 = %d",result);
        
        return 0; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 14:24:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 major_lyu 于 2020-2-29 14:28 编辑

有问题调试一下,跟踪一下变量啊。

你这代码运行结果是:输出“Segmentation fault“或者是”段错误“吧,然后程序就终止了吧。

一般情况出现“段错误(Segmentation fault)”的原因都是访问越界,就是你访问了没有访问权限的内存地址。
具体错误看注释:
#include <stdio.h>
#include <stdarg.h>

int sum(int n, ...);

int sum(int n, ...)
{
        int i,sum = 0;
        va_list vap;//
        
        va_start(vap,n);
        //for (i=0;1<n;i++) // 1<n???,只要参数n大于1, for循环就是个死循环,直到访问到别的数据段内存,产生段错误,程序退出。
        for (i=0; i<n; i++)
        {
                sum += va_arg(vap,int);
        }
        va_end(vap);
        
        return sum;
}
//格式:sum(参数个数,参数,参数……) 
int main( )
{
        int result;
        
        result = sum(3,1,2,3);
        printf("1 2 3 = %d",result);
        
        return 0; 
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 23:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表