私はそれを作ることができるのと同じくらい安全だと思われるコードをいくつか持っています...しかし、私は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 で実行されています。
私が間違っているに違いない初心者のことを誰かが指摘できますか?
ありがとう、
-ケン