[pdp-discuss] TypeAccess question?

Richard Jones dickjr at gmail.com
Thu Nov 16 09:57:23 MST 2006


Thanks for the info.   I could have sworn I tried that earlier and
still had the problem.  In any case, the problem seems to be gone.

On 11/15/06, Randall C. O'Reilly <Randy.OReilly at colorado.edu> wrote:
> Ok, now I see the problem: you define an InitLinks() function with nothing in
> it.  InitLinks MUST call the parent class's initlinks (Layer::InitLinks()),
> and do any of its own functionality.  In your case, you don't need it, so
> remove it.  You are preventing the Layer Initlinks (and its parents) from
> operating...
>
> In version 4.0, we have a TA_SIMPLE_BASEFUNS macro that does all this
> housekeeping stuff automatically :).  It should be available as a beta in a
> few weeks..
>
> - Randy
>
> On Wednesday 15 November 2006 09:02, Richard Jones wrote:
> > Thanks for the reply.  Unfortunately, it doesn't help.  In the
> > TypeDef::GetValStr(...) I'm still getting an EXC_BAD_ACCESS on the
> > last of the following lines:
> >
> >     ...
> >     if(DerivesFrom(TA_taBase)) {
> >       TAPtr rbase = *((TAPtr*)base);
> >       if((rbase != NULL) && ((rbase->GetOwner() != NULL) || (rbase ==
> > tabMisc::root))) {
> >
> > One thing I did try, based on the first sentences of section 18.12 in
> > the help: "If a class contains a pointer to another object, it should
> > typically refer to that object whenever the pointer is set. The
> > interface assumes that this is the case, ..." was to put a dumb check
> > for equality to NULL right after setting my pointer to NULL in my
> > Initialize() function.  This seems to fix the problem but I don't see
> > why, and I haven't yet exhaustively verified this.
> >
> > Does this seem like it should work?
> >
> > On 11/14/06, Randall C. O'Reilly <Randy.OReilly at colorado.edu> wrote:
> > > I bet the SIMPLE_COPY doesn't handle the memberdef* case correctly -- try
> > > getting rid of that to see if that is the source of the problem.  if so,
> > > replace with:
> > >
> > > void Copy_(const TestLayer& cp) { var_md = cp.var_md; }
> > >
> > > - Randy
> > >
> > > On Tuesday 14 November 2006 18:58, Richard Jones wrote:
> > > > I've been having a recurring problem with my code.  Every now and then
> > > > I am getting core dumps while in executing in:
> > > >
> > > > String TypeDef::GetValStr(...)
> > > >
> > > > This will usually be when I want to open an edit dialog on a newly
> > > > created object, such as a layer.  It also happens if I try to save my
> > > > project after newly creating an object.  This latter is a disaster
> > > > since it writes out a corrupt proj.gz file and work is lost.   It
> > > > doesn't happen under all circumstances, but I've got it boiled down to
> > > > reproducibility.  Consider the following class:
> > > >
> > > >   class TestLayer : public Layer {
> > > >
> > > >   public:
> > > >
> > > >        MemberDef*     var_md;
> > > >
> > > >         void  UpdateAfterEdit() {};
> > > >         void  Initialize() { var_md = NULL;};
> > > >         void  Destroy()               { };
> > > >         void  InitLinks() {};
> > > >         SIMPLE_COPY(TestLayer);
> > > >         COPY_FUNS(TestLayer, Layer);
> > > >         TA_BASEFUNS(TestLayer);
> > > >   };
> > > >
> > > > If in NetViewer I create just one TestLayer and then try to edit it I
> > > > have no problem.  If I create two and try to edit the first, again no
> > > > problem.  But if I try to edit the second I get the dump.  Creating
> > > > one at a time doesn't seem to be a problem, most of the the time.
> > > >
> > > > The problem is related to my inclusion of pointers to taBase classes.
> > > > For instance, if I remove the "MemberDef* var_md" above the problem
> > > > goes away.   There must be something I'm supposed to do but am
> > > > missing.  Any advice I could get would be greatly welcome.
> > > >
> > > > Many thanks.
>


-- 
Richard Jones
dickjr at gmail.com


More information about the PDP-Discuss mailing list