I'm probably missing something that's obvious but not so much to me right now...

I have an NSArray category method that takes an NSArray of NSString objects, and returns a C array of C strings (char * const *). This is so I can build a C array for some functions that require a C array.

But I'm running into a problem. With an NSArray containing two NSStrings, "-c" and "/path/to/file", Guard Malloc is complaining that there is a buffer overrun in my code. I know where it is, but what is causing this buffer overrun and what can I do to fix it? Unfortunately I can't switch to using GC at this time.

Here's my code:

- (char * const *)cArrayUsingEncoding:(NSStringEncoding)encoding
{
        size_t length = ([self count]+1)*sizeof(char **);
        char **returnArray = NSZoneMalloc([self zone], length);
        NSUInteger i;
        const NSUInteger count = [self count];
        
[NSMutableData dataWithBytesNoCopy:returnArray length:length]; // add returnArray to the autorelease pool
        for (i = 0 ; i < count ; i++)
        {
                NSString *string = [self objectAtIndex:i];
                NSMutableData *data;
                
NSAssert([string isKindOfClass:[NSString class]], @"Array must be 100% composed of strings"); data = [[[string dataUsingEncoding:encoding] mutableCopy] autorelease];
                [data appendByte:'\0']; // null-terminate the string
returnArray[i] = [data mutableBytes]; <-- GUARD MALLOC CRASHES HERE; i IS ZERO
        }
        returnArray[count] = NULL;      // null-terminate the array
        return returnArray;
}

Nick Zitzmann
<http://www.chronosnet.com/>

_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to