【问题标题】:Segmentation fault on method calling inside a php extensionphp扩展内方法调用的分段错误
【发布时间】:2013-11-04 08:22:35
【问题描述】:

我正在尝试将一些数据传递给存储在 zval 中的对象,在带有此代码的 php 扩展中,我收到分段错误错误

[core:notice] [pid 8645] AH00052: child pid 8649 exit signal Segmentation fault (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 );

【问题讨论】:

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

标签: php c php-extension php-internals


【解决方案1】:

似乎问题在于我如何创建 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);

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    相关资源
    最近更新 更多