Comment faire pour résoudre malloc_error_break?
Je rencontre cette erreur avec l'iOS 3.0 simulateur, mais pas sur la 3.1.3 et 3.2 simulateurs.
Après la création d'une symbolique point d'arrêt sur malloc_error_break
, je le vois dans le journal:
[Session started at 2010-02-13 19:15:22 +0700.]
2010-02-13 19:15:24.405 iPortals[21656:207] bool for 1
iPortals(21656,0xa0089500) malloc: *** error for object 0x285e000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
iPortals(21656,0xa0089500) malloc: *** error for object 0x2850000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
iPortals(21656,0xa0089500) malloc: *** error for object 0x286c000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
iPortals(21656,0xa0089500) malloc: *** error for object 0x287c000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
voici mon code
@implementation WebViewController
@synthesize myWebView;
@synthesize AppDelegate;
@synthesize mybanner;
@synthesize request;
- (void)dealloc
{
//NSLog(@"WebViewController has been dealloc");
myWebView.delegate = nil;
self.myWebView = nil;
[self.myWebView release];
[super setView:nil];
[myWebView release];
myWebView = nil;
request = nil;
[mybanner release];
[super dealloc];
}
- (void)setView:(UIView *)aView
{
//NSLog(@"setView:(UIView *)aView");
if (aView == nil) {
self.myWebView = nil;
}
[super setView:aView];
}
- (void)action {
AppDelegate = nil;
AppDelegate = [[UIApplication sharedApplication] delegate];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:AppDelegate.PushLink]];
}
- (void)didReceiveMemoryWarning {
//NSLog(@"didReceiveMemoryWarning: view = %@, superview = %@", [self valueForKey:@"_view"], [[self valueForKey:@"_view"] superview]);
[super didReceiveMemoryWarning]; //Releases the view if it doesn't have a superview
//Release anything that's not essential, such as cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];
}
- (void)viewDidLoad
{
[super viewDidLoad];
//NSLog(@"viewDidLoad: view = %@", self.view);
self.title = NSLocalizedString(@"iPortals", @"");
//UIBarButtonItem *customItem = [[UIBarButtonItem alloc] initWithTitle:@"Item" style:UIBarButtonItemStyleBordered target:self action:@selector(action];
//self.navigationController.toolbar setItems: = [[UIBarButtonItem alloc] initWithTitle:@"[...]" style:UIBarButtonItemStyleBordered target:self action:@selector(action)];
/*
UIBarButtonItem *emailButton = [[UIBarButtonItem alloc]
initWithImage:[UIImage imageNamed:@"icon.png"]
style:UIBarButtonItemStylePlain target:self
action:@selector(action)];
self.toolbarItems = [NSArray arrayWithObjects:emailButton, nil];
[emailButton release];
//*/
AppDelegate = nil;
AppDelegate = [[UIApplication sharedApplication] delegate];
//NSLog(@"777777777 %@",AppDelegate.PushLink);
/*
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webFrame.origin.y += kTopMargin + 5.0; //leave from the URL input field and its label
webFrame.size.height = 400;
//webFrame.size.height -= 40.0;
self.myWebView = nil;
//*/
//self.myWebView = [[[UIWebView alloc] initWithFrame:webFrame] autorelease];
self.myWebView.backgroundColor = [UIColor grayColor];
self.myWebView.scalesPageToFit = YES;
self.myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
self.myWebView.delegate = self;
[self.view addSubview: self.myWebView];
self.mybanner.backgroundColor = [UIColor clearColor];
[self.view addSubview: self.mybanner];
/*
CGRect textFieldFrame = CGRectMake(kLeftMargin, kTweenMargin,
self.view.bounds.size.width - (kLeftMargin * 2.0), kTextFieldHeight);
UITextField *urlField = [[UITextField alloc] initWithFrame:textFieldFrame];
urlField.borderStyle = UITextBorderStyleBezel;
urlField.textColor = [UIColor blackColor];
urlField.delegate = self;
urlField.placeholder = @"<enter a URL>";
urlField.text = AppDelegate.PushLink;
urlField.backgroundColor = [UIColor whiteColor];
urlField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
urlField.returnKeyType = UIReturnKeyGo;
urlField.keyboardType = UIKeyboardTypeURL; //this makes the keyboard more friendly for typing URLs
urlField.autocapitalizationType = UITextAutocapitalizationTypeNone; //don't capitalize
urlField.autocorrectionType = UITextAutocorrectionTypeNo; //we don't like autocompletion while typing
urlField.clearButtonMode = UITextFieldViewModeAlways;
[urlField setAccessibilityLabel:NSLocalizedString(@"URLTextField", @"")];
[self.view addSubview:urlField];
[urlField release];
*/
request = nil;
request = [NSURLRequest requestWithURL:[NSURL URLWithString:AppDelegate.PushLink]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[self.myWebView loadRequest:request];
}
//called after the view controller's view is released and set to nil.
//For example, a memory warning which causes the view to be purged. Not invoked as a result of -dealloc.
//So release any properties that are loaded in viewDidLoad or can be recreated lazily.
//
- (void)viewDidUnload
{
[super viewDidUnload];
//release and set to nil
[self.myWebView release];
self.myWebView = nil;
}
-(BOOL)canBecomeFirstResponder {
//NSLog(@"canBecomeFirstResponder ");
return YES;
}
-(void)viewDidAppear:(BOOL)animated {
//NSLog(@"viewDidAppear ");
[self becomeFirstResponder];
}
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
//NSLog(@"overrideoverrideoverrideoverrideoverrideoverrideoverrideoverride ");
if ( event.subtype == UIEventSubtypeMotionShake )
{
//Put in code here to handle shake
AppDelegate = nil;
AppDelegate = [[UIApplication sharedApplication] delegate];
[AppDelegate ToggleNavigationBar];
[AppDelegate playsound:1];
[self setAdHide:AppDelegate.toggle];
}
}
- (void)setAdHide:(BOOL)hide {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.6];
if (!hide) {
if (current == UIInterfaceOrientationLandscapeLeft || current == UIInterfaceOrientationLandscapeRight) {
[mybanner setFrame:CGRectMake(0, 272, mybanner.frame.size.width, mybanner.frame.size.height)];
}
else {
[mybanner setFrame:CGRectMake(0, 432, mybanner.frame.size.width, mybanner.frame.size.height)];
}
}
else {
[self restoreAd];
}
[UIView commitAnimations];
}
- (void)restoreAd {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.6];
[mybanner setFrame:CGRectMake(0, 0, mybanner.frame.size.width, mybanner.frame.size.height)];
[UIView commitAnimations];
}
#pragma mark -
#pragma mark UIViewController delegate methods
- (void)viewWillAppear:(BOOL)animated
{
self.myWebView.delegate = nil;
self.myWebView.delegate = self; //setup the delegate as the web view is shown
}
- (void)viewWillDisappear:(BOOL)animated
{
//[self.myWebView removeFromSuperview];
[self.myWebView stopLoading]; //in case the web view is still loading its content
self.myWebView.delegate = nil; //disconnect the delegate as the webview is hidden
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
current = interfaceOrientation;
[self restoreAd];
return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (interfaceOrientation == UIDeviceOrientationPortrait) ||
(interfaceOrientation == UIInterfaceOrientationLandscapeRight));
}
//this helps dismiss the keyboard when the "Done" button is clicked
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[textField text]]]];
return YES;
}
#pragma mark -
#pragma mark UIWebViewDelegate
- (void)webViewDidStartLoad:(UIWebView *)webView
{
//starting the load, show the activity indicator in the status bar
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//finished loading, hide the activity indicator in the status bar
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
//load error, hide the activity indicator in the status bar
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
//report the error inside the webview
//NSString* errorString = [NSString stringWithFormat:
// @"<html><center><font size=+5 color='red'>An error occurred:<br>%@</font></center></html>",
// error.localizedDescription];
//[self.myWebView loadHTMLString:errorString baseURL:nil];
//URLCacheAlertWithError(error);
}
@end
OriginalL'auteur RAGOpoR | 2010-02-13
Vous devez vous connecter pour publier un commentaire.
Suivre la recommandation dans le journal du message: définir un point d'arrêt dans
malloc_error_break
. Lorsque le point d'arrêt des feux, regardez la trace dans Xcode (ou utilisez lebt
commande sur le gdb ligne de commande) et de voir où vous en êtes d'appelfree
, ou de l'API qui utilisefree
.L'utilisation de la mémoire les questions sont parfois détectables à l'aide de l'Xcode analyseur statique - choisir "Construire et d'Analyser" à partir de Xcode menu générer.
C'est le "parfois" peu entrer en jeu.
comment définir un point d'arrêt dans malloc_error_break
ok, je peux briser malloc_error_break pour l'instant
Graham Lee , laissez jeter un oeil à mon image. aussi je ne comprends pas quelle est la cause de l'erreur.
OriginalL'auteur
Vous semblez être à plusieurs reprises en essayant de dealloc votre pointeurs. Dans la méthode dealloc SEULEMENT appel [bla release]; et dans le viewDidUnload méthode affecter votre pointeurs une valeur nulle. Ne pas faire les DEUX dans les deux méthodes.
Vous semblent manquer un peu de variables.
Faut-il encore le faire APRÈS avoir nettoyé votre dealloc et viewDidUnload méthodes?
Oui j'ai déjà nettoyer ,lorsque je tourne l'appareil il aussi un rapport d'erreur à nouveau. Simulateur 3.1.3 et 3.2 de ne pas signaler toute erreur.
OriginalL'auteur willcodejavaforfood
Cela peut sembler complètement différent, mais avec une erreur similaire, ce qui a fonctionné pour moi était de réparer les autorisations du disque.
J'ai eu cette proposition de Mac Terminal - 'pointeur être libérés n'a pas été alloué" erreur lors de l'ouverture du terminal
Aussi, je me rends compte que la question est de 6 ans, il est donc peu susceptible d'être utile à l'original asker. J'espère que cette réponse permet à d'autres personnes ayant les mêmes erreurs.
OriginalL'auteur DiCoder
Étonnamment, ce que résolu pour moi était de m'arrêter et de tourner le dos sur le débogage de l'appareil. Oh, Apple...
OriginalL'auteur Tim Friedland