iPhone 用のアプリケーションを作成していますが、次のエラーが発生します。
malloc: * mmap(size=204800) 失敗しました (エラーコード=12) エラー: 領域を割り当てられません * * デバッグするために malloc_error_break にブレークポイントを設定します
このコードを過度に呼び出した後、これを取得しています:
- (NSInteger) readInt:(NSInteger)defaultValue
{
NSRange sr = NSMakeRange(offset, [pdfData length] - offset);
NSData* sub = [pdfData subdataWithRange:sr];
char* buf = (char*)[sub bytes];
int off = 0;
char c;
do {
c = buf[off++]; //the app crash on this line
} while (c == NEW_LINE || c == CARRIAGE_RETURN||c == EMPTY_STRING);
int startString = off - 1;
do {
c = buf[off++];
} while (c != NEW_LINE && c != CARRIAGE_RETURN && c !=EMPTY_STRING);
off = off - 1;
offset = off + offset+1;
NSString *inStringSet = [[[NSString alloc] initWithData:[sub subdataWithRange:NSMakeRange(startString, off-startString)] encoding:NSASCIIStringEncoding] autorelease];
if ([PDFUtils isNumeric:inStringSet ]) {
NSString* intString = [[[NSString alloc] initWithData:[sub subdataWithRange:NSMakeRange(startString, off-startString)] encoding:NSASCIIStringEncoding] autorelease];
return [intString intValue];
}
return defaultValue;
}
シミュレーターで実行すると、このようなエラーは発生しませんが、メモリ使用量が約 700MB に達しますが、デバイスで実行すると、アプリケーションがクラッシュします。同様の問題を読みましたが、まったく運がありません。ヘルパーポインターは大歓迎です。リークの検出とデバッグに関する問題がいくつかありますが、Instruments で追跡した後、リークはなく、自動リリース プールでメモリが正しく解放されているように見えます。(アプリケーションはデバイスでのみクラッシュします) メモリ使用量のピークを回避する方法はありますか? ありがとう。