Цель C: ошибка «EXC_BAD_ACCESS» - PullRequest
0 голосов
/ 10 октября 2010

Я новичок, пишу простую программу и пока нет никаких предупреждений / ошибок во время компиляции. Я получаю ошибку "EXC_BAD_ACCESS". Буду признателен за любую помощь с этим:

    int main (int argc, const char * argv[]) {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

        moviedatabase *movie1=[[moviedatabase alloc] init];

    [movie1 addMovieWithName:@"DDLJ" andyear:1789 andlength:360 andGenre:Horror];
    [movie1 printAll];
    [movie1 release];

    [pool drain];

    return 0;
}

Вот класс фильмов и класс фильмов, которые он наследует:

@interface moviedatabase :  movies{
//no variables in the class
}

-(void) addMovieWithName: (NSString *)mname andyear: (int) myear andlength: (int) mlength andGenre: (enum Genre) mgenre; 
-(void) printAll;

@end

@interface movies : NSObject {
NSString    *name;
int year;
int length;
enum Genre {Comedy,Drama,Horror,Action} genre;
}

@property (nonatomic) NSString *name;
@property (nonatomic) int year;
@property (nonatomic) int length;
@property (nonatomic) enum Genre genre;

-(id) initWithName: (NSString *)name andyear: (int) year andlength: (int) length andGenre: (enum Genre) genre; 

@end

Включая реализацию базы данных movied:

 #import "moviedatabase.h"


 @implementation moviedatabase

 -(void) addMovieWithName: (NSString *) mname andyear: (int) myear andlength: (int) mlength andGenre: (enum Genre) mgenre
   {
         name=mname;
  year=myear;
  length=mlength;
  genre=mgenre;

  }

-(void) printAll;
 {
  NSLog(@"name=%@, year=%@, length=%@, genre=%@",name,year,length,genre);
 }

 @end

Ответы [ 2 ]

4 голосов
/ 10 октября 2010

Ваш printAll метод использует %@ вместо %i для int переменных.

Это:

- (void)printAll
{
    NSLog(@"name=%@, year=%@, length=%@, genre=%@", name, year, length, genre);
}

Должно выглядеть так:

- (void)printAll
{
    NSLog(@"name=%@, year=%i, length=%i, genre=%i", name, year, length, genre);
}

В NSLog(), %@ используется для NSObject с, а строки стандартного формата printf используются для других примитивов C, например, %i для int, %u для unsigned int%f для float.

1 голос
/ 10 октября 2010

Вы смотрели: Получен сигнал EXC_BAD_ACCESS ?

Этот документ был особенно полезен для меня:

http://www.cocoadev.com/index.pl?DebuggingAutorelease

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...