php扩展ZVAL_STRING疑惑
编译通过
zval tmp;
ZVAL_STRING(&tmp, "hello");
编译失败
zval *tmp;
ZVAL_STRING(tmp, "hello")
最后调用的是这个宏,这里不是有
zval *__z = (z) 说明z传一个指针进来不就好了吗,为啥上面两种会有区别
#define ZVAL_NEW_STR(z, s) do { \
zval *__z = (z); \
zend_string *__s = (s); \
Z_STR_P(__z) = __s; \
Z_TYPE_INFO_P(__z) = IS_STRING_EX; \
} while (0)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
php7跟php5 这两个函数是有差别的 确认下环境,另外,指针没有初始化就被使用了,语言层面的问题,感觉跟php没有多大关系了
zval *tmp
这是个野指针,指向未知内存。你直接用它,当然会出错。zval tmp
是个是在栈上分配了内存的,&tmp
当然会指向分配的那块内存。