Benim PHP uzantısı nesneler bir dizi dönmek olması gerekiyor, ama ben bunu nasıl anlamaya görünüyor olamaz.
Ben bir Graph
nesne C + + yazdım. Graph.getNodes()
, bir std::map<int, Node*>
döndürür. İşte şu anda sahip kodu:
struct node_object { zend_object std; Node *node; }; zend_class_entry *node_ce;
o zaman
PHP_METHOD(Graph, getNodes) { Graph *graph; GET_GRAPH(graph, obj) // a macro I wrote to populate graph node_object* n; zval* node_zval; if (obj == NULL) { RETURN_NULL(); } if (object_init_ex(node_zval, node_ce) != SUCCESS) { RETURN_NULL(); } std::map nodes = graph->getNodes(); array_init(return_value); for (std::map::iterator i = nodes.begin(); i != nodes.end(); ++i) { php_printf("X"); n = (node_object*) zend_object_store_get_object(node_zval TSRMLS_CC); n->node = i->second; add_index_zval(return_value, i->first, node_zval); } php_printf("]"); }
I çalıştırdığınızda php -r '$g = new Graph(); $g->getNodes();'
Ben çıktı almak
XX]Segmentation fault
meaning the getNodes() function loops successfully through my 2-node list, returns, o zaman segfaults. What am I doing wrong?