EXC_BAD_ACCESS導致我的應用程序崩潰。當您嘗試訪問單元化或釋放內存時,通常會發生此問題,但我找不到位置。我試圖與Xcode殭屍檢查沒有成功。應用程序崩潰和樂器不會注意到殭屍。 我正在使用ARC。讀取文件後,EXC_BAD_ACCESS發生Objective-C崩潰
不良訪問發生在方法結尾處,在結束的大括號中。 (見截圖)。此問題僅在發佈模式(優化)下發生,並且僅適用於少數設備。
爲了測試,我做了一個假項目中,方法didFinishLaunching後立即調用。
調用堆棧
- didFinishLaunchingWithOptions
- 的Alloc和init我的自定義對象
- 呼叫READFILE新創建的對象
- 在READFILE
- 即將退出READFILE,但應用程序執行代碼死機
下面的代碼
- (void)readFromFile:(NSString *)fileName {
if (!fileName) {
return;
}
NSString* filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
if (!filePath) {
return;
}
FILE* file = fopen([filePath UTF8String], "r");
if (file == NULL) {
return;
}
size_t length;
char *cLine = fgetln(file, &length);
// I don't think it matters, but the file has about 400 000 lines
while (length > 0) {
char str[length - 1]; // All lines length are > 2
strncpy(str, cLine, length);
str[length - 1] = '\0'; // The crash would still occurs without this line, but less often
// Custom code with str
cLine = fgetln(file, &length);
}
fclose(file);
}
在情況下,它可以幫助你的簡化版本,這裏是我的讀者對象的代碼
@protocol MyReaderProtocol <NSObject>
- (void)readFromFile:(NSString *)fileName;
@end
@interface MyReader : NSObject <MyReaderProtocol>
@end
// How I initialize the objet in the app delegate
MyReader myReader = [[MyReader alloc] init];
[myReader readFromFile:@"myFile.txt"];
您在其他某處有問題。代碼運行良好。 – Nirmalsinh