2012-02-28 73 views
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描述]被調用一切正常。什麼會導致這種奇怪的行爲?

+0

我假設你試圖通過Valgrind的運行,對嗎? – dasblinkenlight 2012-02-28 13:44:21

+0

當你設置斷點時,它會顯示什麼? – Mark 2012-02-28 14:31:41

回答