我想在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