Значение расширения php неверно напечатано почему? - PullRequest
1 голос
/ 15 сентября 2011

Я хочу отправить объект по ссылке. Объект представляет класс

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

}

Где я не прав? СПАСИБО! Цените * * 1012

Когда я запускаю php test.php, значение vor carr.l равно 155160836. ПОЧЕМУ? Где я не прав

1 Ответ

0 голосов
/ 15 сентября 2011

В части кода php, obj11 - неинициализированный указатель, который передается в Car2 :: method ((car2->method(*obj11));). Так что-

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