|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
程序编译成功的,但是会停止工作?什么情况?
本帖最后由 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;
- }
复制代码
|
|