为什么我被告知要在malloc_error_break中设置断点?

时间:2010-05-14 10:22:59

标签: ios ipad

我在应用程序中看到以下错误:

  

(4446,0xa0bc94e0)malloc: *对象0x1d153000的错误:指针   被释放没有分配   * 在malloc_error_break中设置断点以进行调试

这个错误是什么意思?

我正在尝试在表视图中显示2000个地址,并且在下面的代码中看到了使用cellForRowAtIndexPath的错误:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView  dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];


    }

    obdata = [AddressBookData alloc];
    obdata = [arrayLocalAddressbook objectAtIndex:indexPath.row];
    // Set button Tag

    cell.textLabel.text =  [NSString  stringWithString:obdata.lastname];

    return cell;



}

// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    //return [indexArray count];
    return 1;

}



// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{

    return [arrayLocalAddressbook count];

}

导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:1)

应用程序为您提供了如何继续的提示:在malloc_error_break中设置断点。当你到达那里时,检查应用程序的回溯。您可能会发现您过度释放了一个对象或者持有过时的指针。

答案 1 :(得分:0)

两件奇怪的事情:

obdata = [AddressBookData alloc];

你没有在这个对象上调用init - 在obj-c中你通常一起使用alloc-init。

obdata = [arrayLocalAddressbook objectAtIndex:indexPath.row];

然后您立即为此变量分配其他内容,因此永远不会使用第一个AddressBookData。