On Dec 1, 2009, at 10:47, James Maxwell wrote:

> I'm trying to save the state of my app. It chews up a lot of memory, most of 
> which is in large float* matrices. I'm getting an EXC_BAD_ACCESS error in 
> -encodeBytes:length:forKey: and I'm just wondering what might be happening. 
> The float* "coincidences" is a malloced array.
> 
> NSUInteger coincsSize = maxCoincs * inputSize * sizeof(float);
> NSData* coincData = [NSData dataWithBytesNoCopy:&coincidences 
> length:coincsSize];
> [aCoder encodeBytes:[coincData bytes] length:coincsSize 
> forKey:@"coincidences"];
> 
> The app runs fine, but when I try to save, boom... EXC_BAD_ACCESS.
> 
> Is this a decent way to save a float* array?

Not really. :)

You don't show the declaration of 'coincidences', but if that's a pointer to a 
malloc'ed array, then '&coincidences' isn't where you want to copy the data 
from. That's likely why you're getting a big boom. I think you meant:

> NSData* coincData = [NSData dataWithBytesNoCopy:coincidences 
> length:coincsSize];

Nick already pointed out that 'dataWithBytesNoCopy:length:' probably isn't the 
correct method to use here, and (even if it was) putting the data "into" a 
NSData object, then immediately encoding it with 'encodeBytes:length:forKey:' 
is unnecessary. What's wrong with just:

> [aCoder encodeBytes:coincidences length:coincsSize forKey:@"coincidences"];

? (But remember this is architecture-specific as regards to endianness.)


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to