2011-12-12 17 views
18

tôi đang nhận được lỗi này và không biết phải làm gì với điều đó:Lỗi Malloc "không thể phân bổ khu vực" không thành công với mã lỗi 12. Bất kỳ ý tưởng nào để giải quyết vấn đề này?

AppName(3786,0xa0810540) malloc: *** mmap(size=16777216) failed (error code=12) 
*** error: can't allocate region 
*** set a breakpoint in malloc_error_break to debug 

Nếu tôi đặt một breakpoint để dòng đó xảy ra lỗi, tôi không biết những gì tôi phải tìm kiếm đặc biệt cho. Trong các công cụ tôi đã kiểm tra phân bổ và giá trị đang tăng lên cho đến khi 14,5 GB của tất cả các phân bổ.

Ai đó có thể giúp tôi không?
brush51

EDIT 1:
Mọi thông tin:
- Tôi đang cố gắng này trong mô phỏng, không phải trên thiết bị iOS.
- Đó là tất cả các đầu ra (tôi nhận được lỗi này nhiều lần hơn). - các lỗi xảy ra trên dòng này:

NSManagedObjectContext *context = [self managedObjectContext]; 
NSFetchRequest *fetchREntitySetsCards = [[[NSFetchRequest alloc] init] autorelease]; 
//NSFetchRequest *fetchREntityRelCardsAnswersNotes = [[[NSFetchRequest alloc] init] autorelease]; 

NSEntityDescription *entitySetsCards = [NSEntityDescription entityForName:@"EntitySetsCards" inManagedObjectContext:context]; 
//NSEntityDescription *entityRelCardsAnswersNotes = [NSEntityDescription entityForName:@"EntityRelCardsAnswersNotes" inManagedObjectContext:context]; 
setEntity:entityCard]; 
[fetchREntitySetsCards setEntity:entitySetsCards]; 
//[fetchREntityRelCardsAnswersNotes setEntity:entityRelCardsAnswersNotes]; 

NSArray *fetchedObjSetsCards = [context executeFetchRequest:fetchREntitySetsCards error:&error]; 
//The error is here---> 
//NSArray *fetchedObjRelCardsAnswersNotes = [context executeFetchRequest:fetchREntityRelCardsAnswersNotes error:&error]; 


//Badges für TabBarItem Inbox setzen 
setsCount = [context countForFetchRequest:fetchREntityUserSet error: &error]; 
cardsCount = [context countForFetchRequest:fetchREntityCard error: &error]; 
+1

"không thể phân bổ khu vực" có nghĩa là không còn dung lượng bộ nhớ! Có thể là thời gian để bắt đầu xem xét việc quản lý bộ nhớ và giải phóng các tài nguyên không sử dụng. – sean

+4

iOS, 14.5GB phân bổ? Am i thiếu cái gì ở đây? – buddhabrot

+0

không đùa. Ram trên iPhone 4 là gì? là 1GB? –

Trả lời

7

Googling sẽ tiết lộ một vài hướng dẫn về việc sử dụng các công cụ để hiểu những gì đang xảy ra với bộ nhớ của bạn:

Làm thế nào để gỡ lỗi rò rỉ bộ nhớ: (hướng dẫn)
http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial

Và khác:
Fin bộ nhớ ding obj-C rò rỉ (Video)
http://www.youtube.com/watch?v=R449qEuexNs&feature=related

* Có rất nhiều similar questions trên stackoverflow bạn có thể được hưởng lợi từ.

10

Âm thanh lạ, nhưng tôi có cùng hành vi khi chuỗi chính bị quá tải.

Sử dụng bộ nhớ là đủ tối ưu: công cụ cho thấy không có rò rỉ bộ nhớ và sống khoảng 2Mb, không có cảnh báo bộ nhớ khi chạy trên một thiết bị, tất cả các phân bổ lớn đã được thực hiện bên trong hồ bơi autorelease, vv

Nhưng đã có quá trình rất lớn lưu trữ dữ liệu vào db (sử dụng Dữ liệu cốt lõi) được tạo trên luồng chính. Chỉ cần di chuyển mã lưu trữ sang quá trình nền như thế này

dispatch_async(dispatch_get_global_queue 
    (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    BOOL result = NO; 
    result = [[DataManager sharedInstance] storeGuestsToDB]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    //finalization 
    } 
} 

khắc phục sự cố của tôi.

+0

Tôi không chắc chắn rằng tôi hiểu bạn một cách chính xác ... Bạn không nên đặt nó vào main.m, nhưng tất nhiên bạn có thể cố gắng sử dụng một cái gì đó giống nhau trong ứng dụng của bạn. Chỉ cần đặt hoạt động mà bạn cho là bị quá tải thay vì cuộc gọi của tôi tới một DataManager. – Tamara

+0

Cảm ơn câu trả lời của bạn. Đây chính là vấn đề của tôi. Tôi đã tải xuống và lưu trữ một tệp JSON (~ 90mb) .. Với việc di chuyển các giao dịch thành một chuỗi khác, tôi đã loại bỏ được vấn đề. – Prine

+0

Nó không làm việc cho tôi ... và tôi đã kiểm tra, nó không phải là một rò rỉ bộ nhớ. Tôi đang xuất GIF bằng 'CGImageDestinationAddImage' – ninjaneer

0

Tôi gặp phải sự cố này do cuộc gọi đệ quy trong bộ điều khiển chế độ xem viewWillLayoutSubviews. Tôi đã vô hiệu hóa bố cục của chế độ xem bộ sưu tập khiến một chu kỳ vô tận liên tục đặt ra lượt xem.

Các vấn đề liên quan