私はこのコードを持っています:
-(void)getData:(NSString *)data: (id) tv: (id) soc
{
NSLog(@"\nin get data with data\n");
NSLog(data);
数時間後、アプリがクラッシュし、データを使用してデータを取得し、データを印刷しないため、データの印刷時にクラッシュします。デバッグは、文字列の長さ関数のようなもので障害を参照します。XCode では、データは文字列リテラルではなく、安全でない可能性があるという警告があります。私の経験から、最も可能性の高い原因はデータが何らかの形で null であることがわかります。しかし、典型的なメッセージを受信したように見える何かをログに出力しました。ソケットから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 バイトから始めても新しいデータの割り当てが null になる可能性がありますか? nslog にデータを印刷しようとしたときにのみクラッシュし、メモリの割り当てに失敗した場合はクラッシュしませんか?
マイク