鱼C论坛

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

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

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

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

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

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

  3. int sum(int n, ...);

  4. int sum(int n, ...)
  5. {
  6.         int i,sum = 0;
  7.         va_list vap;//定义了列表的名称
  8.        
  9.         va_start(vap,n);//a是列表名称 ,n是第一个数据
  10.         for (i=0;1<n;i++)
  11.         {
  12.                 sum += va_arg(vap,int);//定义数据类型
  13.         }
  14.         va_end(vap);
  15.        
  16.         return sum;
  17. }
  18. //格式:sum(参数个数,参数,参数……)
  19. int main( )
  20. {
  21.         int result;
  22.        
  23.         result = sum(3,1,2,3);
  24.         printf("1 2 3 = %d",result);
  25.        
  26.         return 0;
  27. }
复制代码


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

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

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

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

  3. int sum(int n, ...);

  4. int sum(int n, ...)
  5. {
  6.         int i,sum = 0;
  7.         va_list vap;//
  8.         
  9.         va_start(vap,n);
  10.         //for (i=0;1<n;i++) // 1<n???,只要参数n大于1, for循环就是个死循环,直到访问到别的数据段内存,产生段错误,程序退出。
  11.         for (i=0; i<n; i++)
  12.         {
  13.                 sum += va_arg(vap,int);
  14.         }
  15.         va_end(vap);
  16.         
  17.         return sum;
  18. }
  19. //格式:sum(参数个数,参数,参数……)
  20. int main( )
  21. {
  22.         int result;
  23.         
  24.         result = sum(3,1,2,3);
  25.         printf("1 2 3 = %d",result);
  26.         
  27.         return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

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

  3. int sum(int n, ...);

  4. int sum(int n, ...)
  5. {
  6.         int i,sum = 0;
  7.         va_list vap;//
  8.         
  9.         va_start(vap,n);
  10.         //for (i=0;1<n;i++) // 1<n???,只要参数n大于1, for循环就是个死循环,直到访问到别的数据段内存,产生段错误,程序退出。
  11.         for (i=0; i<n; i++)
  12.         {
  13.                 sum += va_arg(vap,int);
  14.         }
  15.         va_end(vap);
  16.         
  17.         return sum;
  18. }
  19. //格式:sum(参数个数,参数,参数……)
  20. int main( )
  21. {
  22.         int result;
  23.         
  24.         result = sum(3,1,2,3);
  25.         printf("1 2 3 = %d",result);
  26.         
  27.         return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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