无效的内存引用(SIGSEGV)和不完整的类错误实现

时间:2018-06-20 12:00:24

标签: objective-c recursion

我正在编写一个小的递归函数,以从数组中计算整数之和。但是,我收到错误和警告。有人帮我解决这些问题吗?

#import <Foundation/Foundation.h>
@interface SumIntegers:NSObject
{
    NSInteger result;
}

-(NSInteger)calcutateSum:(NSInteger)value;
-(void) printSum;

@end

@implementation SumIntegers

-(NSInteger)calculateSum:(NSInteger)value
{
    NSInteger sum = 0;

        //sum = sum + [[self calculateSum:[array objectAtIndex:i]] integerValue];
        sum = sum + [self calculateSum:value];


    result = sum;
    return result;
}

-(void) printSum
{
    NSLog(@"Sum of integer list is %i",result);
}

@end

int main (int argc, const char * argv[])
{
    NSInteger i;
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSMutableArray *intArray = [NSMutableArray arrayWithObjects:[NSNumber numberWithInteger:1],[NSNumber numberWithInt:3],[NSNumber numberWithInt:5]
                ,[NSNumber numberWithInt:7],[NSNumber numberWithInt:9],nil];

    SumIntegers *sumIntegers = [[SumIntegers alloc]init];

    for (i = 0; i<[intArray count]; i++)
    {
        NSInteger hhh = [sumIntegers calculateSum:[[intArray objectAtIndex:i] integerValue]];
    }

    [sumIntegers printSum];

    [pool drain];
    return 0;
}

我要做的是创建一个接口SumIntegers并创建了一个递归函数来计算整数之和。但是,由于某种原因无法识别此功能,并且还会收到警告“类@end的实现不完整”和内存错误。

Warning(s):
source_file.m:31:1: warning: incomplete implementation of class ‘SumIntegers’
 @end
 ^
source_file.m:31:1: warning: method definition for ‘-calcutateSum:’ not found
source_file.m: In function ‘main’:
source_file.m:44:19: warning: unused variable ‘hhh’ [-Wunused-variable]
         NSInteger hhh = [sumIntegers calculateSum:[[intArray objectAtIndex:i] integerValue]];
                   ^
Error(s):
Invalid memory reference (SIGSEGV)

2 个答案:

答案 0 :(得分:0)

这是我对上述问题的回答。在calculateSum方法中不需要返回值或参数。只需将数组值添加到总和中,然后再次调用computeSum方法,直到num小于数组计数。

#import <Foundation/Foundation.h>

@interface SumOfIntegers:NSObject
{
    NSMutableArray *intArray;
    NSInteger sum;
    NSInteger num;
}

@property NSMutableArray *intArray;
@property NSInteger sum, num;

-(void) calculateSum;
@end

@implementation SumOfIntegers
@synthesize intArray, sum, num;

-(void) calculateSum{

    if(num < [intArray count])
    {
        NSLog(@"number is.... %i", num);

        sum = sum + [[intArray objectAtIndex:num++] integerValue];
        [self calculateSum];
    }
    else
    {
        NSLog(@"Sum of integers is %i", sum);
    }

}    
@end

int main (int argc, const char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSNumber numberWithInteger:1],[NSNumber numberWithInt:3],[NSNumber numberWithInt:5]
                ,[NSNumber numberWithInt:7],[NSNumber numberWithInt:9],nil];

    SumOfIntegers *sumOfIntegers = [[SumOfIntegers alloc]init];
    sumOfIntegers.intArray = array;
    sumOfIntegers.sum = 0;
    sumOfIntegers.num = 0;

    [sumOfIntegers calculateSum];
    [pool drain];
    return 0;
}

答案 1 :(得分:0)

在现代ObjC中:

id="builder-styles-css"