creating a std:vector of t_atom

Nov 20, 2009 at 5:05am

creating a std:vector of t_atom

I want to do a std:vector of t_atom from the one that are passed at the creation of my object…

I have those typedef:

typedef C74::t_symbol MaxSymbol_t;
typedef C74::t_atom MaxAtom_t;
typedef std::vector AttributeVec_t;
typedef AttributeVec_t::iterator Attribute_itt;
typedef AttributeVec_t::const_iterator Attribute_citt;

here is my function

Attribute_t(long ac, MaxAtom_t* av):attributes_()

   MaxAtom_t* elem = av;
   MaxAtom_t* end = av + ac*sizeof(*av);

   MaxAtom_t* tmpAtom = 0;
   long* nbAtom = 0;

   for(; elem !=end; ++elem)
      tmpAtom = new MaxAtom_t();
      tmpAtom->a_type = elem->a_type;
      tmpAtom->a_w = elem->a_w;


and then later I free the memory...

~Attribute_t() throw()
   Attribute_itt end = attributes_.end();
   Attribute_itt itt = attributes_.begin();

   for(; itt != end; ++itt)
      delete *itt;

But I get this when I delete them…
MaxMSP Runtime(493,0xa0471500) malloc: *** error for object 0x16630d20: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

Can someone enlight me?

thks alot



Nov 23, 2009 at 1:57pm

The best way to figure this out is to do exactly what it says:

* in the Xcode project for your external, set up the Max Runtime as your “custom executable”

* In the breakpoints window, define a breakpoint that will stop on the function called “malloc_error_break”.

* start up the debugger…

Then when the debugger pauses execution, you’ll see what it is trying to free. Working backwards from there, hopefully you’ll get it.

Nov 26, 2009 at 12:48pm

Thanks i didn’t know you could setup a break point like this… what is malloc_error_break is it like a symbol? Also on a diffrent note, do you know how to make xcode break at every exception?

Now on my little problem I figured it out… at first my point arithmetic was wrong:
I was doing:
MaxAtom_t* end = av + ac*sizeof(*av);

When I should be doing
MaxAtom_t* end = av + ac;

I was thinking in term of addresses. I realise that when I posted what I was actually copping and them I had to think because i was passing stuff by ref without copying it and in the end I was deleting stuff that I didn’t allocated now it is working fine.

But, My algo to copy atom is kind of tedious now isn’t there a way to copy an atom to and other like

t_atom atomcopy = atomorginal;

and I saw a function call postargs in the documentation but it doesn’t seam to find it… In which include file this is?

thanks alot!!



You must be logged in to reply to this topic.