Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 变量函数va_arg()返回不正确的参数_C++_Function_Parameters_Variadic - Fatal编程技术网

C++ 变量函数va_arg()返回不正确的参数

C++ 变量函数va_arg()返回不正确的参数,c++,function,parameters,variadic,C++,Function,Parameters,Variadic,问题具体解决:请阅读下面的内容 所讨论的变量函数,简化到最简单的是: inline Variant::Variant(int type, int dims, ...) { va_list ap; va_start (ap, dims); //Removed Variant handling code here int i=0; for(;i<dims;i++){ int size = va_arg (ap, int); } //

问题具体解决:请阅读下面的内容

所讨论的变量函数,简化到最简单的是:

inline Variant::Variant(int type, int dims, ...)
{
   va_list ap;
   va_start (ap, dims);

   //Removed Variant handling code here

   int i=0;
   for(;i<dims;i++){
      int size = va_arg (ap, int);
   }


   //Likewise, Removed Variant handling code here

   va_end (ap);
}
当我在

int size = va_arg (ap, int);
在函数行中,我得到以下结果:

size holds the value of 800 (correct)
size holds the value of -43587879... (WTF)
size holds the value of 4387643543 (WTF)
然后程序会出现故障,因为这些显然是完全无效的值

有什么想法吗?提前谢谢

问题部分解决:重新启动以某种方式修复了该问题,但现在又出现了一个新问题…

我的另一个变量函数,也就是后来调用的,似乎可以拾取任何参数 传递给Variant()构造函数而不是它自己的构造函数。有什么想法吗

Variant* ArAcc(Variant* in_variable, ...)
{
  va_list app;
int index=0;

int i, j;
int mult;

  va_start (app, in_variable->arrayaccess->num_dimensions);
  for(i=0;i<in_variable->arrayaccess->num_dimensions;i++){
    mult = 1;
    for(j=i+1;j<in_variable->arrayaccess->num_dimensions;j++){
        mult = mult * in_variable->arrayaccess->dim_sizes[j];

    }
    int size = va_arg (app, int);
    mult = mult * size;
    index += mult;
  }
  va_end (app);

return &((*in_variable)[index]);
}

提前感谢。

尝试删除内联并使其成为正常功能

编辑:我没有看到评论中已经提到这一点

如果重启解决了问题,这就向我表明问题并没有真正解决,只是碰巧没有引起症状

如果第一个问题确实得到解决,则第二个函数中的以下行可能导致第二个问题:

va_start (app, in_variable->arrayaccess->num_dimensions);
那应该是

va_start (app, in_variable);
当然


根据您的评论,我怀疑当第一种情况不起作用时,您实际上是将一个局部变量作为第二个参数传递给
va_start
,而不是函数参数。

您是否尝试添加了u cdecl修饰符?是的,没有任何变化,同样的问题。我使用g++4.6.2(循环中打印大小)进行了尝试当前位置它起作用了。真奇怪。我用VC++2008和minGW在windows上编译,他们都有这个问题。我试着重新开始。声明va_start应该有函数的最后一个已知参数,所以它应该是“va_start(app,in_variable);”而不是“va_start(app,in_variable->arrayaaccess->num_dimensions);”,这很奇怪,因为你说这个版本有效…@64bit_twitchyliquid我不是在评论中给出解决方案的stefaanv。如果他给出答案,你可能会想接受。
va_start (app, in_variable->arrayaccess->num_dimensions);
va_start (app, in_variable);