Thanks.

How can I valgrind my extension? Google isn't bringing up many php
extension topics :/

I can't figure out why I keep getting a seg fault:

typedef struct _foo_object {
  zend_object std;
  zval  *elements;
} foo_object;

static foo_object *foo_object_ptr;

PHP_MINIT_FUNCTION(foo_class)
{
  foo_object_ptr = emalloc(sizeof(foo_object));

  MAKE_STD_ZVAL(foo_object_ptr->elements);
  array_init(foo_object_ptr->elements);

  return SUCCESS;
}

MAKE_STD_ZVAL(foo_object_ptr->elements);
array_init(foo_object_ptr->elements);

These two lines are causing the seg fault, I'm trying to understand why.

On Sat, Apr 7, 2012 at 8:41 PM, Xinchen Hui <larue...@gmail.com> wrote:

> hi:
>  You can refer to ext spl array
>
> Thanks
>
> Sent from my iPhone
>
> 在 2012-4-8,7:12,Matthew Hernandez <proxil...@gmail.com> 写道:
>
> > Here's what I have so far:
> >
> > typedef struct _foo_class_object {
> > zend_object std;
> > zval  *elements;
> > int size;
> > } foo_class_object;
> >
> > static foo_class_object *foo_class_object_ptr;
> > static zend_class_entry *foo_class_ptr;
> >
> > ZEND_METHOD(foo_class, __construct) {
> > foo_class_object_ptr = (foo_class_object
> > *)zend_object_store_get_object(getThis() TSRMLS_CC);
> >
> > array_init(foo_class_object_ptr->elements);
> > }
> >
> > ZEND_METHOD(foo_class, add) {
> > zval *this = getThis();
> > zval *item;
> >
> > if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &item) ==
> > FAILURE) {
> >   RETURN_FALSE;
> > }
> >
> > add_next_index_zval(foo_class_object_ptr->elements, item);
> >
> > RETURN_TRUE;
> > }
> >
> > However, this doesn't work. when you call FooClass::add it causes a
> > segfault. I'm sure I'm abusing something :)
> >
> > thx
> >
> > On Sat, Apr 7, 2012 at 2:38 PM, Matthew Hernandez <proxil...@gmail.com
> >wrote:
> >
> >> Hi Johannes,
> >>
> >> Yes I just found out that I should extend instead of the approach I was
> >> thinking about.
> >>
> >> So I created this:
> >>
> >> typedef struct _foo_object {
> >> zend_object std;
> >> zval  *array;
> >> int size;
> >> } foo_object;
> >>
> >> So the question is how do I correctly pass foo_object around so that I
> can
> >> manipulate *array ? Having a private variable would mean calling
>  getThis()
> >> and handling it that way would be trivial.
> >>
> >> Are there any examples I could see? I'm using the slides from your
> >> presentation in 2009 to help me.
> >>
> >> thanks
> >>
> >> On Sat, Apr 7, 2012 at 2:27 PM, Johannes Schlüter <
> johan...@schlueters.de>wrote:
> >>
> >>> Hi,
> >>>
> >>> On Sat, 2012-04-07 at 11:23 -0700, Matthew Hernandez wrote:
> >>>> This is my first extension I'm working on. I'm trying to make a class
> >>>> available to the user space with 1 private property that is an array.
> >>>
> >>> The first question is: Why? - Why add the overhead of creating such an
> >>> array if it is private? In most cases it is better to extend the
> >>> zend_object in C (struct my_object { zend_object inner; type
> >>> some_data;}) to hold private data. If you want to show it in var_dump
> or
> >>> a debugger you could implement a debug_info hook.
> >>>
> >>> johannes
> >>>
> >>>
> >>>
> >>
>

Reply via email to