cc123hh 发表于 2020-2-28 13:49:34

编译成功了,但是执行了程序停止工作

#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;
}

程序编译成功的,但是会停止工作?什么情况?

major_lyu 发表于 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;
}
页: [1]
查看完整版本: 编译成功了,但是执行了程序停止工作