hmm ok zend_constant *c, *b; char *sname = "myname";
c->name = name; // the c->name is just a pointer to the sname //c->name = strdup(sname); // c->name would have it's own memory b = c; //now b->name points to sname free(b->name); // would try and free b->name which can't be done, segfault! so now you do this: zend_constant *c, *b; char *sname = "myname"; c->name = strdup(sname); // c->name would have it's own memory b = c; //now b->name points to a copy of sname copy_zend_constant(b); //now b->name has its own memory free(b->name); // now this will work no segfaults here and if you look where copy_zend_constant it is only called when you want to copy constants from one hash to another. - Brad --- Joseph Tate <[EMAIL PROTECTED]> wrote: > I don't follow you. Why does it need to be copied? c->name already > contains the value. Old? New? c is c is c. Commenting out the code > causes other problems elsewhere (or seems to). I just don't understand why > it has to be done. > > > -----Original Message----- > > --- Joseph Tate <[EMAIL PROTECTED]> wrote: > > > in the copy_zend_constant function it reads: > > > > > > void copy_zend_constant(zend_constant *c) > > > { > > > c->name = zend_strndup(c->name, c->name_len); > > > if (!(c->flags & CONST_PERSISTENT)) { > > > zval_copy_ctor(&c->value); > > > if (c->flags & CONST_EFREE_PERSISTENT) { /* > > persist_alloc()'d data */ > > > persist_alloc(&c->value); > > > } > > > } > > > } > > > > > > I draw your attention to the first line in the function: > > > c->name = zend_strndup(c->name, c->name_len); > > > > > > First of all, why is this string duplicated only to store it to the same > > > location? Secondly, is c->name freed somewhere else? Cause I > > can't see it > > > being freed. Seems like this line can be removed... > > > > > > > So c points to the "old" value and you need to copy the name and > > the value to > > the "new" one, name and value. and the way hashes and emalloc > > works the memory > > will be freed automatically. > > > > > __________________________________________________ Do You Yahoo!? Yahoo! Tax Center - online filing with TurboTax http://taxes.yahoo.com/ -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php