我是Objective C的新手。详细信息我正在阅读过去三天的目标c。下面提到的方法是根据Sera of Erastosthenes算法生成素数直到特定的数字。我正在尝试调试程序,但是当代码到达行时
“if(product> size)”
下一步将立即将其带到
“for(j = 2; j <= size; j ++)”
我不知道调试出了什么问题。当产品大于大小时进入中断。但是当条件为假(产品&gt;大小)时,为什么不进入下一个if
的条件if(array [product-1]!= 1)
我是否需要重新编译代码。我正在使用xcode来调试mac os X 10.x上的代码
@interface SeiveofErastosthenes:NSObject {
int* array;
int size;
}
- (SeiveofErastosthenes *)initMe:(int)ssize; - (void)calculatePrimeNumbers; - (void)print;
@end
- (void)calculatePrimeNumbers { int product = 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;
}
}
}
}
答案 0 :(得分:0)
确保在Xcode偏好设置中取消选中“懒惰加载符号” - &gt;调试。它有时会造成严重破坏。
答案 1 :(得分:0)
Xcode项目默认设置为-Os
优化(优化速度和空间),对于两者调试和发布版本,奇怪。这种优化将使调试变得困难,因为代码可能会因性能而重新排序。检查“调试”配置的项目和目标设置,并确保Optimization Level
设置为“无”。
答案 2 :(得分:-1)
好的,我找出了问题所在 Objective C调试器很糟糕
在我的程序中
if(array [product-1]!= 1) {
array[product] == 1;
}
如果根据它没有必要,它不会执行语句
“array [product] == 1;”根据算法这是错误的,但它仍然是一个有效的代码
根据c,这是一个有效的语句,它应该执行它,返回的值是布尔值true或false。目标C只是忽略它并进入下一个循环。它是如此智能,甚至不检查条件if(array [product]!= 1)