ios:malloc:**对象0x6e78580的错误:已释放对象的校验和不正确
我有以下方法:ios:malloc:**对象0x6e78580的错误:已释放对象的校验和不正确,ios,malloc,nsurlconnection,Ios,Malloc,Nsurlconnection,我有以下方法: - (NSString*) make_sychronous_POST_request_with_payload:(NSData*) payload { NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://xyz.com"]]; [request setHTTPMethod:@"POST"]; NSData
- (NSString*) make_sychronous_POST_request_with_payload:(NSData*) payload
{
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://xyz.com"]];
[request setHTTPMethod:@"POST"];
NSData *postData = [[Base64 encodeBase64WithData:payload] dataUsingEncoding:NSASCIIStringEncoding];
[request setHTTPBody:postData];
NSURLResponse* response = [[NSURLResponse alloc] init];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
data = [Base64 decodeBase64WithString:[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]];
return [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
}
但是为了线路
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
我得到这个错误:
AppName(24163,0xa0c87540) malloc: *** error for object 0x6caf4b0: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
(gdb) up
#27 0x0006153b in -[FinTS30 checkForFinTS30BankWithURL] (self=0x6ca41a0, _cmd=0x9cdf8) at /path/to/project/AppName/FinTS30.m:72
72 NSString* answer = [self make_sychronous_POST_request_with_payload:message];
Current language: auto; currently objective-c
我不明白为什么会这样
(顺便说一句:这里我明确希望使用同步请求,而不是异步请求。)
编辑:
好吧,这真的很奇怪。问题似乎是由postData对象引起的。这是我的代码的修改版本,不会崩溃
- (NSString*) make_sychronous_POST_request_with_payload:(NSData*) payload
{
NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:bd.bankURL]];
[request setHTTPMethod:@"POST"];
NSData *postData = [[Base64 encodeBase64WithData:payload] dataUsingEncoding:NSASCIIStringEncoding];
[request setHTTPBody:postData];
[postData description]; //adding this prevents the code from crashing
NSURLResponse* response = [[NSURLResponse alloc] init];
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
data = [Base64 decodeBase64WithString:[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]];
return [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
}
虽然这看起来很混乱,但我多次测试了它。如果我注释[postData description],那么如果调用[postData description],代码就会崩溃,一切正常。什么会导致这种奇怪的行为?您在项目中使用ARC吗?尝试使用_自动释放修饰符进行响应
NSURLResponse __autoreleasing * response = [[NSURLResponse alloc] init];
由于变量的原因,您传递给方法的变量可能已被释放且无效
其他信息:
我假设您尝试通过valgrind运行该程序,对吗?当您设置它建议的断点时,它会向您显示什么?