LUA XMLHttpRequest 中有个bug
2015-08-11 11:35
519 查看
http://www.cocoachina.com/bbs/read.php?tid-200293-page-e-fpage-20.html
PS 3.6里面这个问题依然存在
LUA XMLHttpRequest 中有个bug
cocos2d-x 3.0 ,源码文件frameworks\cocos2d-x\cocos\scripting\lua-bindings\manual\lua_xml_http_request.cppstatic int lua_cocos2dx_XMLHttpRequest_getResponseHeader(lua_State* L)函数中( 970行 )
auto iter = self->getHttpHeader().find(value);
if (iter != self->getHttpHeader().end())
{
tolua_pushstring(L, (iter->second).c_str());
return 1;
}
这段代码有个bug,
因为
self->getHttpHeader()
返回的是一个临时变量的map(参看定义std::map<std::string,
std::string> getHttpHeader() { return _httpHeader ;}),
这个临时变量在该行代码结束时就被销毁了,导致iter失效了。
所以在lua中如果调用 getResponseHeader()就会失败。如果是debug模式的话,debugruntime会报告 Expression:
map/set iterators incompatible 异常。
解决办法有2个。
1:更改std::map<std::string,
std::string> getHttpHeader() { return _httpHeader ;}定义为std::map<std::string, std::string>& getHttpHeader() { return _httpHeader ;}
2:
auto iter = self->getHttpHeader().find(value);
if (iter != self->getHttpHeader().end())
{
tolua_pushstring(L, (iter->second).c_str());
return 1;
}
更改为
map<string, string> httpHeader = self->getHttpHeader();
auto iter = httpHeader.find(value);
if (iter != httpHeader.end())
{
tolua_pushstring(L, (iter->second).c_str());
return 1;
}
相关文章推荐
- 计算机网络常考知识点总结
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core
- Linux下tcp 和 udp 套接字收发缓冲区的大小决定规则
- 登陆网站时隐藏的密码在http头中是可以看的
- iOS最简单方法判断网络类型——通过状态栏显示
- 如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率
- 为Android Studio设置HTTP代理
- twisted05 简单的http服务器
- 网络编程socket之bind、Listen 及 accept
- TCP/IP协议学习之二(网际协议IP)
- 网络推送的简单使用
- TCPClient
- 【Java&Android开源库代码分析】のandroid-async-http の开盘
- json相关转换及httpPost发送
- 7月末周网络安全报告:发现放马站点增至204个
- TCP协议与UDP协议的区别
- TCP/IP协议学习之一(以太网帧格式)
- 互联网金融网络借贷系统架构
- 网络层
- matlab环境下使用libsvm,转自http://apinetree.blog.51cto.com/714152/1560254