f



Exception causes access violation

Hi,

I have a mind boggling error in VC++ .NET.

An exception THException is being  thrown, but it seems to cause an
accessviolation, but the code is so simple that I cant figure out where the
av comes from.


MyMesh::Point cog()
{
    if (fCount != 0)
        return fCoG/fCount;
    else
        throw THException("There were no vertices to average...");
<--- this gets thrown
}


class THException
{
public:
    THException(string msg){fMsg = msg;}
    string getMessage(){return fMsg;}
protected:
private:
    string fMsg;
};


try
{
    ...
    mesh.cog()
    ...
}
catch(THException e)
{
    cerr << "EXCEPTION:" << e.getMessage() << endl;
    exit(1);
}
catch(...)
{
    cerr << "EXCEPTION:" << "Unknown Exception caught..." << endl;
    exit(1);
}


OUTPUT:
First-chance exception at 0x77e73887 in SphericalParameterization.exe:
Microsoft C++ exception: THException @ 0x0012f9d8.
First-chance exception at 0x004f1bbc in SphericalParameterization.exe:
0xC0000005: Access violation reading location 0xcdcdcddd.


0
tohu (1)
11/4/2003 12:14:45 PM
comp.lang.c++ 49423 articles. 7 followers. Post Follow

1 Replies
804 Views

Similar Articles

[PageSpeed] 15

"Toon Huysmans" <tohu@ruca.ua.ac.be> wrote in message news:3fa79805.0@news.ruca.ua.ac.be...
> Hi,
>
> I have a mind boggling error in VC++ .NET.

Try this in micrsoft.public.vc.language.   It looks fine from a C++ point of
view (provided all those spurious copies of string don't throw).

CDCDCDCD is the debug mode "fill" pattern for uninitialized memory.
Are you sure the compile options you have specified allow exceptions?
I don't know about .NET, but VC6 you had to specifically enable exception
handling (and even then there were some bugs in it).

> class THException
> {
> public:
>     THException(string msg){fMsg = msg;}

How aboiut
    THException(const string& msg) : fMsg(msg) { }

> catch(THException e)

If you ever derive from THException, would be better to catch by reference here.



0
ron156 (1433)
11/4/2003 2:04:22 PM
Reply: