编译成功了,但是执行了程序停止工作
#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: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]