Evan <edrum...@gmail.com> writes: > Hi everyone, > > I am experiencing the following strange and fatal behavior. Given the > function below: > > VectorN MatrixN::get_row1(unsigned i) const > { > VectorN v; > get_row2(i, v); > return v; > } > > The variable 'v' has the address '0x7ffff8c4d988'. Stepping through > gdb to get_row2(), where 'v' is passed in by reference, reports: > > MatrixN::get_row2 (this=0x7fff31c34940, i=0, resu...@0x7fff31c34a50) > > The address of 'v' (called 'result' in get_row2) has suddenly > changed! Even stranger, 'print v' while in get_row1() indicates: > > $4 = { > _vptr.VectorN = 0x7fff31c34a50, > ... > } > > So, vptr (I assume this has to do with the fact that VectorN has > virtual methods) actually points to the address that is passed to > get_row2()! Regardless of this occurrence, any changes that I make to > 'result' in get_row2() do not show up as they should in 'v' in get_row1 > (). > > Unfortunately, this behavior is not reproducible in a small test > program, just in my library of 70k lines of code :) > > Any elucidation about what might be happening would be greatly > appreciated.
You should show us the definition of VectorN and the signature of get_row2. This could occur if VectorN inherit from multiple superclasses, and get_row2 takes one in parameter as reference. Other cases are certainly possible. -- __Pascal Bourguignon__ _______________________________________________ help-gplusplus mailing list help-gplusplus@gnu.org http://lists.gnu.org/mailman/listinfo/help-gplusplus