【问题标题】:php extension value not correct printed why?php扩展值不正确打印为什么?
【发布时间】:2011-09-15 07:00:12
【问题描述】:

我想通过引用发送一个对象。对象代表一个类

[test.php]

$car= new Car();
$car->l=1000;

$car2 = new Car2();
$car2->method($car);

[php_cod.cc]

PHP_METHOD(Car2, method)
{
    Car2 *car;
    Car obj11;
    zend_class_entry ce2;

     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &obj11) == FAILURE) {
        RETURN_NULL();
    }



    car2_object *obj = (car2_object *)zend_object_store_get_object(
        getThis() TSRMLS_CC);
    car2 = obj->car2;
    if (car2 != NULL) {
        //cout<<"in car 2 ref"<<endl;

        //car2->reference(s);
        (car2->method(obj11));
    }

}

[test.cc]

void Car2::method(Car &carr)
{
    cout<<"IN THE REFERENCE CLASS"<<carr.l<<endl; 

}

我哪里错了? 谢谢!欣赏

当我运行 php test.php 时,值 vor carr.l 等于 155160836. 为什么?我哪里错了

【问题讨论】:

    标签: php c++ ubuntu php-extension


    【解决方案1】:

    在代码的 php 部分,obj11 是一个未初始化的指针,它被传递给 Car2::method ((car2-&gt;method(*obj11));)。所以-

     cout<<"IN THE REFERENCE CLASS"<<carr.l<<endl; 
     // carr is a garbage reference and is causing the segmentation fault
    

    【讨论】:

    • 如何解决这个问题?我应该在 php_code.cc 代码中更改什么?
    • 这个电话应该做什么? zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &amp;obj11)
    • 我解决了这个问题。我已更改为 Car2 obj11。没有分段错误,但是 carr.ll 的值不是 1000。它是 155160836。为什么?
    • 该行将对象作为参数/
    • Car2 obj11; obj11 是一个对象,其成员没有被初始化/分配任何东西。所以,它的成员变量有垃圾。
    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 2021-04-13
    • 2012-09-13
    • 1970-01-01
    • 2011-07-17
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多