我在应用程序中看到以下错误:
(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];
}
导致这种情况的原因是什么?
答案 0 :(得分:1)
应用程序为您提供了如何继续的提示:在malloc_error_break
中设置断点。当你到达那里时,检查应用程序的回溯。您可能会发现您过度释放了一个对象或者持有过时的指针。
答案 1 :(得分:0)
两件奇怪的事情:
obdata = [AddressBookData alloc];
你没有在这个对象上调用init - 在obj-c中你通常一起使用alloc-init。
obdata = [arrayLocalAddressbook objectAtIndex:indexPath.row];
然后您立即为此变量分配其他内容,因此永远不会使用第一个AddressBookData。