Zend API: array_init

array_init 和array_init_size 这2个看起来像是个函数其实这2个都是宏,具体定义在文件:zend_API.h 中。

#define array_init(arg)			_array_init((arg), 0 ZEND_FILE_LINE_CC)
#define array_init_size(arg, size) _array_init((arg), (size) ZEND_FILE_LINE_CC)

_array_init函数定义在zend_API.c文件中。

/* Argument parsing API -- andrei */
ZEND_API int _array_init(zval *arg, uint size ZEND_FILE_LINE_DC) /* {{{ */
{
	ALLOC_HASHTABLE_REL(Z_ARRVAL_P(arg));

	_zend_hash_init(Z_ARRVAL_P(arg), size, NULL, ZVAL_PTR_DTOR, 0 ZEND_FILE_LINE_RELAY_CC);
	Z_TYPE_P(arg) = IS_ARRAY;
	return SUCCESS;
}


通过对_array_init函数的分析,可以看到传递给_array_init的arg参数必须是已经初始化了的zval,否则会报段错误。所以array_init和array_init_size的正确用法是:

zval *arr1, *arr2;
MAKE_STD_VAL(arr1);
MAKE_STD_VAL(arr2);

array_init(arr1);
array_init(arr2, 31);

转载于:https://my.oschina.net/jackin/blog/173458

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值