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