2012-12-11 97 views
0

我有這樣的代碼:的NSString和崩潰

-(void)getData:(NSString *)data: (id) tv: (id) soc 
{ 
NSLog(@"\nin get data with data\n"); 
NSLog(data); 

幾小時應用程序崩潰後,並達到與數據獲取數據,不打印數據,因此它的崩潰對數據的打印。調試引用類似字符串長度函數的失敗。在XCode中,數據有一個警告:它不是一個字符串文字,並且可能不安全。現在我的經驗告訴我,最可能的罪魁禍首是數據是空的。但它也在日誌中打印了一些看起來像是收到了典型消息的東西。它說它有來自套接字的131個字節。當我測試時,它上次崩潰了它有189個字節。但它從不打印它。

的數據是從插座liket這在發送中接收數據:

UInt8 buffer[len]; 
NSLog(@"Received %d bytes from socket %d\n", 
     len, CFSocketGetNative(s)); 
CFDataGetBytes(df, range, buffer); 
NSString *oldtext = [mTextViewAlias text]; 

char buffer2[len]; 
for(int a=0; a<len; a++) 
    buffer2[a]=buffer[a]; 

NSMutableData *buffer3 = [[NSMutableData alloc] init]; 
[buffer3 appendBytes:buffer2 length:len]; 
NSString *newdata = [[NSString alloc] initWithData: buffer3 encoding:NSASCIIStringEncoding];  

和調用類的方法時,它打印的數據崩潰只是:

[mytelnet getData:newdata:mTextViewAlias:(__bridge id)(s)]; 

我可以有內存泄漏或什麼東西,幾個小時後,我內存不足,導致新數據分配爲空,即使我開始了大約100個字節?它會崩潰,只有當我試圖在nslog中打印數據,而不是之前如果它未能分配內存?

邁克

+0

不知道這是什麼,但這裏是我如何處理它的調試:1.將「其他警告標誌」設置爲-Wall並獲得一個乾淨的編譯。 2.確保你沒有收到來自靜態分析儀的警告。 3.如果您懷疑自己可能正在運行內存,請使用「泄漏/分配」在儀器中運行應用程序。 –

+0

請發佈堆棧跟蹤。 – trojanfoe

回答

2

而不是

NSLog(data); 

使用

NSLog(@"%@",data); 

這可能不是解決你的根本原因,但你擺脫了警告,並可能會得到一些更reasonalbe和樂於助人的調試輸出。

您可能也會擺脫那次崩潰。 Hovever這不是一個承諾。

+0

似乎工作。現在幾個小時沒有崩潰。 – LanternMike