问题部分解决:请阅读底部
有问题的可变参数函数,最简单的是:
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);
}
如您所见,有问题的函数是我的 Variant 类的重载构造函数。这个特定的构造函数在声明数组时会考虑维度的大小和数量。
所以这条线在我的 main() 中运行:
Variant(ARRAY_ARRAYTYPE, 3, 800, 22, 22);
当我断点之后
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)
然后程序段错误,因为显然这些是完全无效的值。
有任何想法吗?提前致谢。
问题部分解决:重新启动以某种方式解决了该问题,但现在是一个新问题......
之后调用的我的 OTHER 可变参数函数似乎拾取了传递给 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]);
}
和...
ArAcc(&SomeVariant, 7, 9);
提前致谢。