ios - va_list 在 64 位模拟器上崩溃

标签 ios nsstring 64-bit ios-simulator exc-bad-access

当使用 64 位 iOS 模拟器时,下面的初始化函数崩溃并出现 EXC_BAD_ACCESS (code=1) 错误。有人知道为什么吗?以及如何正确修复它。

有关信息:“格式”不是零,它在 32 位模拟器和任何 32/64 位 iPhone/iPad 设备上工作得很好。

void Log (NSString * format, ...)
{
   va_list argList;
   va_start(argList, format);
   NSLogv(format, argList);
   NSString* string = [[NSString alloc] initWithFormat: format arguments: argList];
   va_end(argList);

...
}

首先在 AppDelegate 中调用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   Log(@"app options %@", launchOptions);
   ...
}

最佳答案

不知何故,A-Live 评论给了我一个主意,我找到了避免崩溃的方法。

我在同一个 va_start/va_end block 中使用了 argList 两次

[[NSString alloc] initWithFormat: format arguments: argList];

NSLogv(format, argList);

iOS 64 位模拟器似乎不喜欢它。不知道为什么它可以在任何其他平台(以及真实设备)中找到它。所以我通过制作两个不同的 bock 来修复它

va_list argList;

va_start(argList, format);
NSString* string = [[NSString alloc] initWithFormat: format arguments: argList];
va_end(argList);

va_start(argList, format);
NSLogv(format, argList);
va_end(argList);

希望对大家有所帮助。 如果有人知道为什么,我仍然很想听听。

关于ios - va_list 在 64 位模拟器上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23833357/

相关文章:

ios - 为什么应用程序会在设备内存不足时崩溃?

ios - Swift 3.0 开始游戏

ios - 如何在 MFMailComposeController 中实现类似于电子邮件文本字段的 UITextField

objective-c - 如何显示 NSString * 的最后一个字符

objective-c - Objective-C stringWithCString "Method cache corrupted"

assembly 分割错误

ios - 如何制作宏?

iphone - NSCocoaErrorDomain 代码=256

c++ - 为 VS2010、WINDOWS7、64BIT 构建 CUDA 示例时出现错误 MSB3721

c++ - 调用 CComModule.RegisterServer、_AtlComModule.RegisterServer 和 LoadTypeLibEx 进行 TypeLib 注册有什么区别?