2 superchao88 superchao88 于 2013.10.18 16:15 提问

内存泄露如何找?????

多运行几次就会出现
malloc: *** error for object 0x1e206e14: incorrect checksum for freed object - object was probably modified after being freed.

*** set a breakpoint in malloc_error_break to debug

以下是程序的调用顺序

NSString *u = [testURL stringByAppendingString:@"/time/set/getfamily"];
NSURL *url = [NSURL URLWithString:u];

NSDictionary *connectParams = [NSDictionary dictionaryWithObjectsAndKeys:

// [NSString stringWithFormat:@"%@", BINDID], @"bind_id",
BINDID, @"bind_id",
nil];

NSMutableData *_mdata = [self createJsonCompressAndEncrypt:connectParams];

NSData *reqdata = [WebService request:url body:_mdata];

NSDictionary *resultsDictionary = [NSDictionary dictionary];
if (reqdata.length == 0) {
    //连接错误,服务器无返回

} else {
    resultsDictionary = [self decryptDecompressJson:reqdata];

    DLog(@"data --> dictionary: %@", resultsDictionary);

    if (resultsDictionary && [resultsDictionary[@"ret"] intValue] == 0) {
        ProtectSettingReturnMessage *userInfoReturnMessage = [[[ProtectSettingReturnMessage alloc] init] autorelease];
        userInfoReturnMessage.cmdType = [NSString stringWithFormat:@"%@", resultsDictionary[@"mode"]];
        userInfoReturnMessage.timeLength = [NSString stringWithFormat:@"%@", resultsDictionary[@"time_total"]];
        userInfoReturnMessage.urlPeriod = resultsDictionary[@"time_period"];
        userInfoReturnMessage.unlimited = [NSString stringWithFormat:@"%@", resultsDictionary[@"enabled"]];

        return userInfoReturnMessage;
    }
}

return nil;



NSString *requestJson = [reqParams JSONString];
DLog(@"reqParams: %@", [reqParams JSONString]);

//构造Json,格式为:XXX{}
NSString *inStr = [NSString stringWithFormat:@"%d", (int)++ requestNum];
NSString *requestStr = [inStr stringByAppendingString:requestJson];
//    NSData *requestData = [requestStr dataUsingEncoding:[NSString defaultCStringEncoding]];
NSData *requestData = [requestStr dataUsingEncoding:NSUTF8StringEncoding];

//压缩,加密
//    NSData *compressData = [NSData dataByCompressingData:requestData];
zlibCompress *zz = [[[zlibCompress alloc] init] autorelease];
NSData *compressData = [zz dataByCompressingData:requestData];

NSMutableData *_mdata = [[NSMutableData alloc] init];
if (compressData) {
    NSData *desData = [Utility desData:compressData key:DESKey CCOperation:kCCEncrypt];
    //        NSString *desStr = [[NSString alloc] initWithData:desData encoding:[NSString defaultCStringEncoding]];

    if (desData) {
        _mdata = [NSMutableData dataWithData:desData];
    } else {
        DLog(@"请求数据加密失败!!!!");
    }
} else {
    DLog(@"请求数据压缩失败!!!!");
}

return _mdata;


Byte* bytes = (Byte*)[data bytes];
NSInteger len = [data length];
NSMutableData *compressedData = [[[NSMutableData alloc] initWithCapacity:len] autorelease];
Byte* compressedBytes = new Byte[len];

z_stream stream;
int err;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.opaque = (voidpf)0;

err = deflateInit(&stream, Z_DEFAULT_COMPRESSION);
CHECK_ERR(err, @"deflateInit");


stream.next_in = bytes;
stream.avail_in = len;
stream.avail_out = 0;
while (stream.avail_out == 0) {
    stream.avail_in = len - stream.total_in;
    stream.next_out = compressedBytes;
    stream.avail_out = COMPRESSION_BLOCK;
    err = deflate(&stream, Z_NO_FLUSH);
    [compressedData appendBytes:compressedBytes length:(stream.total_out-[compressedData length])];
    if (err == Z_STREAM_END)
        continue;
    CHECK_ERR(err, @"deflate");
}
stream.avail_out = 0;
while (stream.avail_out == 0) {
    stream.avail_in = len - stream.total_in;
    stream.next_out = compressedBytes;
    stream.avail_out = COMPRESSION_BLOCK;
    err = deflate(&stream, Z_FINISH);
    [compressedData retain];
    [compressedData appendBytes:compressedBytes length:(stream.total_out-[compressedData length])];
    if (err == Z_STREAM_END)
        continue;
    CHECK_ERR(err, @"deflate");
}
err = deflateEnd(&stream);
CHECK_ERR(err, @"deflateEnd");

delete[] compressedBytes;
return compressedData;

求大牛解解

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
CString内存泄露HTML.rar
CString 内存泄露 ,网上找的资料。CString 内存泄露 ,网上找的资料。CString 内存泄露 ,网上找的资料。
有关内存泄漏的查找解决思路方法
有关内存泄漏的查找解决思路方法 从网上看到的感觉不错 给大家分享 内存泄漏指的是软件在运行过程中对于申请的内存空间没有释放,导致内存占用越来越大,最后程序异常崩溃,而且此时也不会留下任何痕迹,没有任何系统日志可查。 内存泄漏也分为两种,一种是程序一起动,然后占用了内存,不会随着程序运行增长; 一种是随着程序运行不停增长的;如果是第一种可以放过,对二种一定要仔细检查,检查工具推荐用
如何找内存泄露
 先写一段这样的程序:#include "stdafx.h"#include void AllocateMemory() {      int* a = new int[2000];      for(int i=0;i  {  *a=0;  a++;  }     Sleep(1); }int _tmain(int argc, _TCHAR* argv[]){   while(1)   
查找及定位内存泄露的简单方法
在VC编译器下的做法:在每个头文件中加入:#ifdef _DEBUG  #define new DEBUG_NEW  #undef THIS_FILE  static char THIS_FILE[] = __FILE__; #endif在main函数开头加入:int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); tmpFlag |= _CRTD
内存泄露排查步骤——内存优化(四)
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/49949833 文章出自:薛瑄的博客你也可以查看我的其他同类文章,也会让你有一定的收货!Android Device Monitor分析heapAndroid Device Monitor分析heap的总内存占用大小来初步判断是否存在泄露 Android Device Monit
查找内存泄漏的一个思路
做了持久压力测试,发现内存增长的很快,注释大法查了半天发现两个泄漏点,不过代码太多了,分开调试又很麻烦,所以就想看看内存里面到底是啥。 总结了下方法: 1)启动程序 2)获取程序的 3)cp /proc//maps ./last 4)触发内存增长(我这个程序是发包),等到内存增长足够多的时候 5)cp /proc//maps ./now 6) vimdiff last now 看看增
Android App定位和规避内存泄露方法研究
1.内容 本文档包含如下内容: 如何确定App存在内存泄露 如何定位App的内存泄露位置 怎样避免内存泄露
android应用内存泄露
android的内存泄露问题,教你如何避免内存泄露 优化程序
如何检查内存泄露并进行定位
1. 定义:应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费2. 对于C和C++这种没有Garbage Collection 的语言来讲,我们主要关注两种类型的内存泄漏:   堆内存泄漏(Heap leak)。对内存指的是程序运行中根据需要分配通过malloc,realloc new等从堆中分配的一块内存,再是完成后必须通过调用对应的 free或者delete 删
delphi内存泄露查找工具之MemProof教程
MemProof教程简介        MemProof(内存清道夫)是AutomatedQA出品的一款非常不错的检测内存泄漏和资源泄漏的免费调试工具,适合于WIN32平台下使用DELPHI/C++ BUILDER开发的应用程序。 正在装载数据……利用它可以方便的查找出一些忘记释放的指针以及资源。它通过在调试模式下运行目标程序,监视程序的创建和释放操作,以达到检测资源泄漏的效果。监测过程中