Цель C: Почему я получаю «EXC_BAD_ACCESS»? - PullRequest
0 голосов
/ 28 декабря 2011

Я действительно новичок в Objective C и пытаюсь написать программу для проверки гипотезы Коллатца.Когда я запускаю программу, она останавливается после первого сканирования и выдает «EXC_BAD_ACCESS».Вот мой код:

int original,i;

NSString *PrintFull;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"Collatz Conjecture:");
    NSLog(@"Print full results?");
    scanf("%s",PrintFull);

    NSLog(@"What number should we go up to?");
    scanf("%d", &original);

    while (original <= 100) {
        NSLog(@"\n\n%d", original);
        i = original;
        while (i != 1) {
            if (i % 2) {
                i = (i*3)+1;
            } else {
                i = (i/2);
            }

            if ([PrintFull isEqualToString:@"yes"]) {
                NSLog(@"%d",i);
            }
        }

        original++;
    }
}

Что я здесь не так делаю?

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011
  • scanf после строки формата должны указывать на уже выделенные объекты. В этом случае вы просто объявили указатель и передали его без установки. scanf попытается выполнить запись в это местоположение, но, поскольку указатель содержит значение мусора, приложение вылетает.

  • scanf из библиотеки C 'stdio.h', что означает, что он не знает о NSStrings, которые взяты из среды Objective-C 'Foundation'.

Следующее должно решить эти проблемы

int original,i;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSLog(@"Collatz Conjecture:");

    NSLog(@"Print full results?");

    char inputBuffer[80];
    scanf("%s", inputBuffer);
    NSString *printFull = [NSString stringWithCString:inputBuffer encoding:NSUTF8Encoding];
2 голосов
/ 28 декабря 2011

scanf не работает с типами объектов, такими как NSString. Пожалуйста, смотрите сообщение SO - Использование scanf с NSStrings .

1 голос
/ 28 декабря 2011

Во-первых, вы должны инициализировать и выделить NSString. Во-вторых, scanf не может обработать NSString.

Также обратите внимание, что имена классов начинаются с заглавной буквы, а экземпляры классов - с маленькой.

...