[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