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 > >>> > >>> > >>> > >> >