2013-10-25 178 views
0

我试图一些数据传递到存储在的zval,PHP扩展与此代码内的对象,并且我接收分段错误分段故障

[芯:注意] [pid 8645] AH00052:孩子pid 8649退出信号分割错误(11)

有没有人可以帮助我理解为什么我得到这个错误以及调用对象方法的正确方法是什么?

的感谢!

//create zval with the data 
    zval *zbuffer; 
    MAKE_STD_ZVAL(zbuffer); 
    ZVAL_STRINGL(zbuffer, WS_G(buffer), WS_G(bufferLen), 1); 

    ///push data in object 
    zval *retval_ptr; 
    zend_call_method(*WS_G(zobj), ce, NULL, "push", strlen("push"), &retval_ptr, 1, zbuffer, NULL TSRMLS_CC); 
+0

'zend_call_method()'的最后两个参数是什么?我认为'zbuffer,NULL TSRMLS_CC);'应该是'zbuffer,NULL,TSRMLS_CC);'或者这是一个复制/粘贴错误? – Havelock

回答

0

看来,这个问题是关于我是如何创造zbuffer ZVAL正确的代码是:

zval *zbuffer; 
    MAKE_STD_ZVAL(zbuffer); 
    Z_TYPE_P(zbuffer) = IS_STRING; 
    Z_STRVAL_P(zbuffer) = WS_G(buffer); 
    Z_STRLEN_P(zbuffer) = WS_G(bufferLen); 

谢谢!