According to ARC documentation, out parameter will be changed to auto release one:
NSError ** error will be auto changed to NSError * __autorelease * error. So It's expected behavior that crash happens. An article about this here http://blog.pioneeringsoftware.co.uk/2012/03/06/out-parameters-when-arcing On 2012-11-7, at 下午9:05, Andreas Grosam wrote: > Xcode 4.5.1, ARC enabled. > > I've this C++ member function, for a testing environment (gtest): > > > NSDictionary* fetchUser(NSNumber* ID, NSError** error) > { > id user = nil; > //@autoreleasepool // crashes when @autoreleasepool is enabled > { > id data = ...; // response body of a HTTP Response (NSData) or NSError > object, never nil. > if ([data isKindOfClass:[NSData class]]) { > user = [NSJSONSerialization JSONObjectWithData:data > options:0 > error:error]; > } > else if (error) { > *error = data; > } > } // autoreleasepool > return user; > } > > > > The problem here is, if the autorelease pool is **enabled**, I get a crash in > the caller's code: > NSError* err = nil; > NSDictionary* deletedUser = this->fetchUser(userID, &err); > EXPECT_TRUE(deletedUser == nil); <== the crash occurs > **before** this statement, but **after** the return statement of the function > fetch user. > > The debugger does not show a stack frame to confirm this, though. > > libobjc.A.dylib`objc_msgSend: > 0x7fff86b2fe80: testq %rdi, %rdi > 0x7fff86b2fe83: je 0x7fff86b2feb0 ; objc_msgSend + 48 > 0x7fff86b2fe85: testb $1, %dil > 0x7fff86b2fe89: jne 0x7fff86b2fec7 ; objc_msgSend + 71 > 0x7fff86b2fe8c: movq (%rdi), %r11 > 0x7fff86b2fe8f: pushq %rax > ==> 0x7fff86b2fe90: movq 16(%r11), %r10 // Thread 1: > EXC_BAD_ACCESS (code=13, address=0x0) > 0x7fff86b2fe94: movl %esi, %eax > 0x7fff86b2fe96: andl (%r10), %eax > 0x7fff86b2fe99: movq 16(%r10,%rax,8), %r11 > 0x7fff86b2fe9e: incl %eax > 0x7fff86b2fea0: testq %r11, %r11 > 0x7fff86b2fea3: je 0x7fff86b2fedb ; objc_msgSend + 91 > ... > > There is no stack frame. > > > This has something to do with the error parameter. If I pass nil for the > error parameter, the crash does not occur anymore. > > > Any hints? > > > Thanks in advance! > > Andreas > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/cocoa-dev/bob.cromwell2012%40gmail.com > > This email sent to bob.cromwell2...@gmail.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com