N
Noah Roberts
I have a class, that inherits from a class that inherits virtually from
another class. I have a breakdown occuring and it is not wrt the
virtually inherited class but one of the other MIed pure virtual
classes.
I get this in my call stack at the point of explosion:
Flo.exe!DDocument:ispatch(DFZone * ptr=0x0298d260) Line 94 + 0x32
bytes C++
Flo.exe!DDocument:ispatch(DFZone * __A0=0x0298d260) + 0x2f
bytes C++
Flo.exe!DDocument::ReadDocumentItem(DType type=DT_ZONE,
DispatchAcceptor * & LinkParent=0x01ce8c98, int & ctPipes=0x00000000,
TangCount & DiskCount={...}, CDisk & disk={...}) Line 4534 + 0x17
bytes C++
Notice the second to the last call, the first call to something called
Dispatch. This function has no code to look at. It alters the object
pointed to by __A0 such that further up in the second call to Dispatch
things explode. It writes to pointers that should be null at this
point data that is apparently outside the program's memory space. This
function simply doesn't exist anywhere in code and has no line
information. Notice the name __A0, this is apparently an
implementation defined function and I have no idea why.
This only happens when a particular, and unrelated, class is inherited
virtually.
The compiler is MSVC++ 8 (VS2005). I will attempt to put up some code
that exhibits the problem, if I can, tomarro...for now I'm just
currious if anyone has seen this before and can identify what kind of
problem I am experiencing.
another class. I have a breakdown occuring and it is not wrt the
virtually inherited class but one of the other MIed pure virtual
classes.
I get this in my call stack at the point of explosion:
Flo.exe!DDocument:ispatch(DFZone * ptr=0x0298d260) Line 94 + 0x32
bytes C++
Flo.exe!DDocument:ispatch(DFZone * __A0=0x0298d260) + 0x2f
bytes C++
Flo.exe!DDocument::ReadDocumentItem(DType type=DT_ZONE,
DispatchAcceptor * & LinkParent=0x01ce8c98, int & ctPipes=0x00000000,
TangCount & DiskCount={...}, CDisk & disk={...}) Line 4534 + 0x17
bytes C++
Notice the second to the last call, the first call to something called
Dispatch. This function has no code to look at. It alters the object
pointed to by __A0 such that further up in the second call to Dispatch
things explode. It writes to pointers that should be null at this
point data that is apparently outside the program's memory space. This
function simply doesn't exist anywhere in code and has no line
information. Notice the name __A0, this is apparently an
implementation defined function and I have no idea why.
This only happens when a particular, and unrelated, class is inherited
virtually.
The compiler is MSVC++ 8 (VS2005). I will attempt to put up some code
that exhibits the problem, if I can, tomarro...for now I'm just
currious if anyone has seen this before and can identify what kind of
problem I am experiencing.