我正在构建一个带有一堆函数的标题来做一些天文数学,到目前为止一直很好,除了这两个函数使用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可以做的不仅仅是崩溃。
答案 0 :(得分:2)
我看到了你的编辑。原因是崩溃是因为NSLog
期望在找到%@
格式说明符时找到指向对象的指针 - 即内存位置。显然,浮点数不能是有效的内存地址,因此程序崩溃。 Xcode没有修复它,因为NSLog
接受一个字符串和一个变量参数列表。但是,在C中,您不能指定varargs的类型,因此在一般情况下,无法确定NSLog
应该采用什么类型的参数。
(当你致电printf
时,gcc会提供一些格式说明符检查,但NSLog
也不会发生这种情况。)