在cocos2d-x3.4中, 使用HttpRequest进行网络请求,如果一直停留在当前页面,一切正常;如果在数据返回之前退出当前页面,返回上一页面,程序崩溃,提示
malloc: *** error for object 0x7fc9ba8cb400: pointer being freed was not allocated
我理解的是回调中的指针已经被释放了.我想在数据返回进入回调时判断指针是否被释放,或者使用类似oc中的弱指针__weak来处理,但是没有找到解决的方法,希望大神指点
调用网络请求方法,回调中为精灵加载图片:
NetWorkUtils::loadNetworkImage(url, =](Texture2D* texture){
rAvatar->setTexture(texture);
});
网络请求方法:
static void loadNetworkImage(const char* url, const std::function<void(Texture2D*)> &callback){
HttpRequest* request = new HttpRequest();
request->setUrl(url);
request->setRequestType(HttpRequest::Type::GET);
request->setResponseCallback(=](HttpClient *sender, HttpResponse *response){
if (!response)
{
return;
}
if (0 != strlen(response->getHttpRequest()->getTag()))
{
printf("%s completed", response->getHttpRequest()->getTag());
}
int statusCode = (int)response->getResponseCode();
char statusString = {};
printf(statusString, “HTTP Status Code: %d, tag = %s”, statusCode, response->getHttpRequest()->getTag());
if (!response->isSucceed())
{
printf(“response failed”);
printf(“error buffer: %s”, response->getErrorBuffer());
return;
}
// dump data
std::vector *buffer = response->getResponseData();
// create image
Image* image = new Image;
image->initWithImageData((unsigned char*)buffer->data(),buffer->size());
// create texture
auto texture = new Texture2D();
bool isImage = texture->initWithImage(image);
if(isImage)
{
if (callback) {
// 外部回调方法
callback(texture);
}
}
image->release();
});
request->setTag("loadWebImage");
HttpClient::getInstance()->send(request);
// 设置连接的超时时间
HttpClient::getInstance()->setTimeoutForConnect(10);
request->release();
}
请大神帮忙啊