0

我有这个代码:

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

几个小时后,应用程序崩溃,它使用数据获取数据并且不打印数据,因此它在打印数据时崩溃。调试以字符串长度函数之类的方式引用失败。在 XCode 中,数据有一个警告,表明它不是字符串文字并且可能不安全。现在我的经验告诉我,最可能的罪魁祸首是数据不知何故为空。但它还在日志中打印了一些看起来像是收到典型消息的东西。它说它有来自套接字的 131 个字节。当我测试并且它上次崩溃时它有 189 个字节。但它从不打印它。

数据从套接字发送进来,就像接收数据一样:

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 中打印数据时它才会崩溃,如果它未能分配内存,它不会更早崩溃?

麦克风

4

1 回答 1

2

代替

NSLog(data);

采用

NSLog(@"%@",data);

这可能无法解决您的根本原因,但您可以摆脱警告,并且可能会获得一些更合理和有用的调试输出。

你也可以摆脱那次崩溃。然而,这不是一个承诺。

于 2012-12-11T10:14:22.470 回答