我想在PHP擴展中創建並返回一個數組數組。根據我的理解,我應該使用emalloc()
爲數組元素分配空間,但我不明白的是何時適合釋放它。我有一個類似於此的PHP函數:何時在PHP擴展中釋放內存?
PHP_FUNCTION(test)
{
int i;
zval **pt = emalloc(sizeof(zval*) * 10);
array_init(return_value);
for (i = 0; i < 10; ++i) {
MAKE_STD_ZVAL(pt[i]);
array_init(pt[i]);
add_index_double(pt[i], 0, 1);
add_index_zval(return_value, i, pt[i]);
}
}
我應該在哪裏釋放爲pt
分配的內存?
我正在調用'array_init(pt [i]);'在'MAKE_STD_ZVAL()'後面,忘記將它添加到示例中。所以,如果我理解正確,我根本不應該調用'emalloc()',因爲'MAKE_STD_ZVAL()'負責分配內存,並且當它的引用計數到達零時內存被取消分配(並且應該發生當它超出PHP的範圍時,如果它只被引用一次)。 – rid 2012-04-10 18:01:38
@Radu是的,'MAKE_STD_ZVAL'分配(與'emalloc')zval。然而,你第一次調用'emalloc'並不是分配一個zval,而是分配10個zval *的數組,這與thibg不同。像'actual'說的那樣,你可以使用一個局部變量,或者你可以完全拋棄這個數組,並且這樣做:'{zval * zv; MAKE_STD_ZVAL(ZV); add_index_double(zv,0,1); add_index_zval(return_value,i,zv); }'。 – Artefacto 2012-04-10 18:23:59