[英]Exception Unhandled c++ va_arg
这是代码,使用具有多个变量的函数获取最小值。
#include<iostream>
#include <stdarg.h>
#include <math.h>
using namespace std;
float minim(int n,...);
int main(void)
{
float v[10];
int n;
cout << "Introduceti numerele reale: " << endl;
for (int i = 0; i < 10; i++)
{
cout << "v[" << i + 1 << "]= ";
cin >> v[i];
}
cout << "\n";
cout << "Minimul dintre primele 7 numere introduse este: " << minim(7, v[0], v[1], v[2], v[3], v[4], v[5], v[6]) << endl;
cout << "Minimul dintre ultimele 3 numere introduse este: " << minim(3, v[7], v[8], v[9]) << endl;
cout << "Minimul dintre cele 10 numere este: " << minim(2, minim(6, v[0], v[1], v[2], v[3], v[4], v[5], v[6]), minim(3, v[7], v[8], v[9])) << endl;
}
float minim(int n, ...)
{
float element, minim=0;
va_list args;
va_start(args, n);
for (int i = 0; i < n; i++)
{
element = va_arg(args, float);
if (i = 0)
minim = element;
else if (element < minim)
minim = element;
}
va_end(args);
return minim;
}
抛出未处理的异常:读取访问冲突。 参数是 0x600004。 在行元素 = va_arg(args, float);
编译器说明了一切:
$ g++ --std=c++20 -O2 -W -Wall -o foo foo.cc
foo.cc: In function ‘int main()’:
foo.cc:9:17: warning: unused variable ‘n’ [-Wunused-variable]
9 | int n;
| ^
foo.cc: In function ‘float minim(int, ...)’:
foo.cc:29:23: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
29 | if (i = 0)
| ~~^~~
In file included from foo.cc:2:
foo.cc:28:40: warning: ‘float’ is promoted to ‘double’ when passed through ‘...’
28 | element = va_arg(args, float);
| ^
foo.cc:28:40: note: (so you should pass ‘double’ not ‘float’ to ‘va_arg’)
foo.cc:28:40: note: if this code is reached, the program will abort
注意: i = 0
表示这是一个无限循环,将尝试获取无限数量的参数。 这可能就是你看到的崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.