繁体   English   中英

异常未处理 c++ va_arg

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM