2010-11-28 6 views
0

私はObjective Cを初めて使用しています。詳しくは、過去3日間で目的cについて読んでいます。以下に述べる方法は、ErastosthenesアルゴリズムのSeiveのように特定の番号まで素数を生成することです。プログラムをデバッグしようとしていますが、コードが常に行に来るとき目的Cのデバッグが適切な手順を踏まずに

"if(product> size)"私はdebug.Itはに入ると間違って何が起こっているか知らない

次のステップは、すぐに "(;; J < =サイズJ ++、J = 2)のための"

にそれを取るでしょう製品がサイズよりも大きいときに中断します。しかし、条件が偽(製品>サイズ)の場合、なぜそれは行われません私はマックOS X 10.xの上のコードをデバッグするためのXcodeを使用していますcode.Iを再コンパイルする必要がありますか(配列[製品-1]!= 1)

場合

ある場合、次の条件O


@interfaceのSeiveofErastosthenes:NSObjectの {

int* array; 
int size; 

}

- (SeiveofEastosthenes *)initMe:(int)ssize; - (void)calculatePrimeNumbers; - (void)print;

@end

- (ボイド)calculatePrimeNumbers {int型の製品= 0。 int i = 0; int j;

memset(array,0,size); 
array[0]=0; 
array[1]=2; 

for(i = 1 ; i < size ; i++) 
{ 
    if(array[i] == 1) 
     continue; 

    array[i] = i+1; 

    for(j = 2; j <= size ; j++) 
    { 

     product = (i+1) * j; 

     if(product > size) 
     { 
      break; 
     } 

     if(array[product-1] != 1) 
     { 
      array[product] == 1; 
     } 
    } 
} 

}

答えて

-1

オクラホマ人は私はこの問題 オブジェクティブCデバッガは私のプログラムで

を吸引考え出し

(配列[製品-1]!= 1) {

場合
array[product] == 1; 

}

それでも必要ない場合はステートメントを実行しません

"array [product] == 1;"これはアルゴリズムによっては間違っていますが、それでも有効なコードです

これはcに従った有効なステートメントであり、実行する必要があります。返される値は真または偽のブール値です.Objective Cはそれを無視して(array [product]!= 1)

+0

これはどのようにして、嫌なデバッガーを示していますか?あなたがコンパイラに問題があるように聞こえます。あなたは "デバッグ"ビルド設定を使用してビルドしていますか?そうでない場合は、デバッグ時に最適化を行わずにコードをコンパイルしてみてください。この予期しない動作を防止します。 –

+1

その行は何もせず、おそらくコンパイラによって最適化されます。デバッガとは何の関係もありません。 – robottobor

0

Xcodeの[環境設定] - > [デバッグ]で[シンボルを遅延読み込み]がオフになっていることを確認してください。それは時々大混乱を招くことがあります。

0

の場合、Xcodeプロジェクトは-Osの最適化(速度とスペースの最適化)で設定されています。のデバッグとリリースビルドは奇妙です。この種の最適化は、パフォーマンスのためにコードを並べ替えることができるため、デバッグが困難になります。 "Debug"設定のプロジェクトとターゲット設定を確認し、Optimization Levelが "None"に設定されていることを確認してください。

+0

私は最適化を "None" -00にしても、それでも同じことをします。 – SRIPRIYA

関連する問題