我有一些看起来尽可能安全的代码......但我得到了EXC_BAD_ACCESS
. 不经常介意,就这一次。
编码:
- (void) deviceListenerCallback:(DeviceEventTypeDef)type data:(void*)data
{
DeviceInfoDef* o = (DeviceInfoDef*)data;
char newName[256];
if (o->DeviceName) {
strncpy(newName, o->DeviceName, 255);
} else {
strncpy(newName, "(null)", 255);
}
NSString *deviceNameUTF8 = [NSString stringWithUTF8String:(const char *)newName];
'data' 是从 C 库传递给我们的指针。数据存在且未损坏。
strncpy 中以 newName 结尾的字符是“Network Audio\0\0\0\0\0...”
当EXC_BAD_ACCESS
我调用 stringWithUTF8String 时,它位于最后一行。错误是:
EXC_BAD_ACCESS (code=1, address=0x30303030)
调用栈是:
CFAllocatorAllocate
................................
5 +[NSString stringWithUTF8String:]
6 -[MyClass deviceListenerCall...
该项目在 ARC 下运行。
谁能指出我必须做错的新手事情?
谢谢,
-肯