cocos2d-x3.4 网络请求返回数据崩溃

在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();
}

:6:请大神帮忙啊

指针释放了2次

好好检查下吧

哪里释放了两次?每次都是崩在调用网络请求的回调中,我觉得应该是rAvatar被释放了,找不到这个对象,所以才崩的

malloc: *** error for object 0x7fc9ba8cb400: pointer being freed was not allocated
这个错误提示已经很明显了, 没有分配内存的指针被释放,就是你释放了2次

在数据没有来到,但是又不得不退出该界面时,调用一下:HttpClient::getInstance()->destroyInstance() ;s

我尝试着在onExit()方法中调用了 HttpClient::getInstance()->destroyInstance() ; 但是还是崩溃了.
不过我发现如果在界面上加载一张网络图片显示, 未加载完成退出,不会崩溃. tableview的cell上加载的网络图片就会崩溃, 不知道你有没有遇到过这个情况,或者tableview的cell加载网络图片的时候是怎么处理的呢

你好,你的问题我没有遇到过,但是根据经验,我觉得不会是和什么tableview这个控件的加载图片有关。总之,在要换界面时,如果网络数据还未来到,记得要释放掉网络模块,也就是调用HttpClient::getInstance()->destroyInstance()。如果这一部分调用了,那么网络模块是不是导致崩溃了的。相信你,经过测试,(正向,反向),能找到问题所在的。周末愉快!

这个问题一直没有解决, 只能用一个方法避开. 就是使用listview替代tableview, 分页加载数据, 每次加载完成才能操作.暂时这么解决着,希望以后能找到更好的办法

这个问题我还是没有很好地解决, 暂时用listview代替tableview, 分页加载来避免这个bug
再次感谢~