这两个Objective-C函数崩溃,没有消息

时间:2010-12-03 16:13:56

标签: objective-c function

我正在构建一个带有一堆函数的标题来做一些天文数学,到目前为止一直很好,除了这两个函数使用Debugging terminated.消息使调试器崩溃而没有别的。 NSLog语句打印到控制台就好了正确的答案,但它们崩溃了。有什么想法吗?

float calcTimeJulianCent(float julianDate) {
 NSLog(@" -calcTimeJulianCent");
 float tCentury = (julianDate - 2451545.0) / 36525.0;
 NSLog(@"  -calculation complete, tCentury = %1.4f", tCentury);
 return tCentury;
}

float calcJDFromJulianCent(float tCentury) {
 NSLog(@" -calcJDFromJulianCent");
 float julianDate = tCentury * 36525.0 + 2451545.0;
 NSLog(@"  -calculation complete, tCentury = %1.4f", julianDate);
 return julianDate;
}

这是调用函数的方法:

- (IBAction)doMath {
 NSLog(@"-%@:%s called", [self class], _cmd);

    // other calls that work

 float julianCentury = calcTimeJulianCent(julianDay);
 NSLog(@"  -calcTimeJulianCent called: %@", julianCentury);

 float backToJulianDate = calcJDFromJulianCent(0.1092);
 NSLog(@"  -calcJDFromJulianCent called: %@", backToJulianDate);

    // more calls that work
}

编辑:回答 - 愚蠢的错误。函数返回floats,我在NSLog中使用%@作为字符串。你认为Xcode可以做的不仅仅是崩溃。

1 个答案:

答案 0 :(得分:2)

我看到了你的编辑。原因是崩溃是因为NSLog期望在找到%@格式说明符时找到指向对象的指针 - 即内存位置。显然,浮点数不能是有效的内存地址,因此程序崩溃。 Xcode没有修复它,因为NSLog接受一个字符串和一个变量参数列表。但是,在C中,您不能指定varargs的类型,因此在一般情况下,无法确定NSLog 应该采用什么类型的参数。

(当你致电printf时,gcc会提供一些格式说明符检查,但NSLog也不会发生这种情况。)