Wow! I'd forgotten how helpful this list is - and how quickly!

Everyone pointing out my use of &coincidences is obviously right. I figured it 
out soon after getting my first reply. I already made an @property accessor for 
coincidences, so I just used that and the crashes went away. 

As far as the NSData goes, I'm glad you pointed the redundancy of it out. I'll 
just encode the bytes themselves. 

Just a note to Sherm that coincidences is malloced as (maxCoincs * inputSize * 
sizeof(float)), because it's a 2D float array with dimensions maxCoincs x 
inputSize. 

The software is just a research project, for now, so no worries about 
portability (I'll cross that bridge if I ever get there!).

Now onto the crash that's happening when I try to actually *use* the app after 
loading from a saved file! ugh... ;-)

thanks all,

J.


On 2009-12-01, at 11:40 AM, Sherm Pendley wrote:

> On Tue, Dec 1, 2009 at 1:47 PM, James Maxwell
> <jbmaxw...@rubato-music.com> 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);
> 
> This looks suspicious to me. Based on the variable names, it looks
> like you malloc(maxCoincs * sizeof(float)), then store the actual
> number of floats in the buffer in inputSize. If that's what you're
> doing, you only need to multiply by maxCoincs (to get the size of the
> whole buffer) or by inputSize (to find out how much of the buffer is
> actually in use) - not by both of them.
> 
>> NSData* coincData = [NSData dataWithBytesNoCopy:&coincidences 
>> length:coincsSize];
>> [aCoder encodeBytes:[coincData bytes] length:coincsSize 
>> forKey:@"coincidences"];
> 
> As someone else said, if you created the buffer with "coincidences =
> malloc(...)", then you don't need to dereference it here; doing so
> will give you the address of the pointer variable, not the address of
> the buffer to which it points.
> 
> What's the point of creating the NSData object here? Wouldn't this be
> just as good?
> 
>    [aCoder encodeBytes:coincidences length:coincsSize forKey:@"coincidences"];
> 
> sherm--
> 
> -- 
> Cocoa programming in Perl:
> http://www.camelbones.org

_______________________________________________

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