簡體   English   中英

EXC_BAD_ACCESS,簡單的計算器,Objective-C

[英]EXC_BAD_ACCESS, simple calculator, Objective-C

大家好,我一直在為 iOS 編寫一個簡單的計算器教程,因為我的幾個朋友希望我教他們一些基本概念。 我想我花了太多時間對我已經編寫的應用程序進行微調,因為當我編寫這段代碼時,它被錯誤所困擾。

我會發布代碼; 之后會解釋它是如何工作的。

#import "_23ViewController.h"

@interface _23ViewController ()
{
    NSMutableArray* stack;
    NSMutableString *stringA;
    NSMutableString *stringB;
    NSMutableString *operation;
    NSUInteger *aorb;
}

@end

@implementation _23ViewController

- (void)viewDidLoad
{
   [super viewDidLoad];

   // Do any additional setup after loading the view, typically from a nib.
   [stack addObject: stringA];
   [stack addObject: stringB];
}

- (void)didReceiveMemoryWarning
{
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}

- (IBAction)zero:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"0"];
}

- (IBAction)one:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"1"];
}

- (IBAction)two:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"2"];
}

- (IBAction)three:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"3"];
}

- (IBAction)four:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"4"];
}

- (IBAction)five:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"5"];
}

- (IBAction)six:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"6"];
}

- (IBAction)seven:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"7"];
}

- (IBAction)eight:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"8"];
}

- (IBAction)nine:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"9"];
}

- (IBAction)decimal:(id)sender
{
   [[stack objectAtIndex:*(aorb)] stringByAppendingString:@"."];
}

- (IBAction)equals:(id)sender
{
   float a = [[stack objectAtIndex:0] floatValue];
   float b = [[stack objectAtIndex:1] floatValue];
   float answer;

   if ([operation isEqualToString:@"addition"])
   {
       answer = a + b;
   }
   if ([operation isEqualToString:@"subtraction"])
   {  
       answer = a - b;
   }
   if ([operation isEqualToString:@"multiplication"])
   {
       answer = a * b;
   }
   else
   {
       answer = a / b;
   }
   self.disp.text = [NSString stringWithFormat:@"%f",answer];
}

- (IBAction)clear:(id)sender
{
    for (int i = 0; i < 2; i++)
    {
        [stack insertObject:@"0" atIndex:i];
    }
}

- (IBAction)plus:(id)sender
{
    aorb++;
    [operation setString: @"addition"];
}

- (IBAction)minus:(id)sender
{
    aorb++;
    [operation setString: @"subtraction"];
}

- (IBAction)div:(id)sender
{
    aorb++;
    [operation setString: @"division"];
}

- (IBAction)mult:(id)sender
{
    aorb++;
    [operation setString: @"multiplication"];
}

@end

現在,理想情況下,這段代碼應該做的是在加載視圖時,將stringAstringB添加到名為stack的數組中。 每個按下的數字都應附加到位於 NSUInteger aorb指定的數組索引處的字符串。 最初這是零,但是當按下操作按鈕時,它會增加,並將operation NSString 設置為特定操作。 一旦 NSUInteger 增加,數字鍵就會附加到stringB而不是stringAequals IBAction會考慮到這一點並相應地旋轉結果。

問題是,每當我模擬這個時,我都會收到EXC_BAD_ACCESS error, code 2, address 0x0在我首先按下的任何鍵上的EXC_BAD_ACCESS error, code 2, address 0x0 ,特別是在理想執行的行上。 我之前必須調試SIGABRT ,但沒有任何幫助可以真正解決此錯誤。 這是我第一次拋出這樣的內存異常,所以我真的不知道該怎么做。

如果這還不夠詳細/如果您需要更多代碼( .h文件),請告訴我,我會將其發布。 謝謝大家。

將此添加到您的viewDidLoad

[super viewDidLoad];

stack = [NSMutableArray array];
stringA = [NSMutableString string];
stringB = [NSMutableString string];

[stack addObject: stringA];
[stack addObject: stringB];

你還需要初始化aorb (並給它一個更好的名字)。 它也可能不需要是指針。

將其更改為NSUInteger aOrB; 並將aOrB = 0添加到viewDidLoad

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM