1
不正確的校驗和我有以下方法:IOS:malloc的:***錯誤對象0x6e78580:用於釋放對象
- (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描述]代碼崩潰,如果[postData描述]被調用一切正常。什麼會導致這種奇怪的行爲?
我假設你試圖通過Valgrind的運行,對嗎? – dasblinkenlight 2012-02-28 13:44:21
當你設置斷點時,它會顯示什麼? – Mark 2012-02-28 14:31:41