• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Strange behaviour of iPhone
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Strange behaviour of iPhone


  • Subject: Re: Strange behaviour of iPhone
  • From: "Gerriet M. Denkmann" <email@hidden>
  • Date: Sun, 22 Sep 2013 00:22:31 +0700

On 21 Sep 2013, at 23:48, Paul Scott <email@hidden> wrote:

> The "important" brace means that the tupels array is block local. You then print the block local variable from outside the block, which is no longer valid.
>
Yes, tupels lives only inside the block. But:

1. tupelsP lives outside the block.
2. why does the number of things in tupels[] makes a difference?
3. why does printing the tupelsP inside the block makes a difference?
4. Why is there no problem with the same code in OS X?
5. Why only with structs? Using some double[] array shows no problems.
6. If this is NOT legal C-code, why does the compiler not complain?

This final (and most important) question: is this legal C-code, and if not, which C-rule gets violated?

Kind regards,

Gerriet.


>> On Sep 21, 2013, at 9:00 AM, "Gerriet M. Denkmann" <email@hidden> wrote:
>>
>> I just created a new iOS app - universal, Master-Detail, no CoreData and added the following into application:didFinishLaunchingWithOptions:
>>
>> // --- #define BUG_FIX1
>>
>> #if        DEBUG
>>   NSLog(@"%s Debug build - no bugs here",__FUNCTION__);
>> #else    //    Release
>>   #ifdef BUG_FIX1
>>       NSLog(@"%s Release build with bug-fix",__FUNCTION__);
>>   #else
>>       NSLog(@"%s Release build with bug",__FUNCTION__);
>>   #endif
>> #endif    //    debug or release
>>
>> typedef struct
>> {
>>   double    size;
>>   double    value;
>>
>> } tupel_t;
>>
>> tupel_t *tupelsP;
>> NSUInteger nbrOfTupels;
>>
>> //    the parenthesis in the next line is important
>> {
>>   tupel_t tupels[] =    //    need more than 2 tupels for the bug
>>   {
>>       { 6, 8},
>>       {48, 8},
>>       {99, 7}
>>   };
>>
>>   tupelsP = tupels;
>>   nbrOfTupels = sizeof(tupels) / sizeof(tupel_t);
>>   #ifdef BUG_FIX1
>>       NSLog(@"%s tupelsP = %p",__FUNCTION__, tupelsP);    //    printing tupelsP fixes the bug
>>   #else
>>       NSLog(@"%s nbrOfTupels %lu",__FUNCTION__, (unsigned long)nbrOfTupels);
>>   #endif
>> }
>>
>> NSLog(@"%s tupelsP %p first (should be 6): %g last (should be 99): %g",__FUNCTION__,
>>   tupelsP, tupelsP->size, (tupelsP+nbrOfTupels-1)->size);
>>
>> Then run the Release build and got:
>>
>> tupelsP 0xbfffcaf8 first (should be 6): 2.00737e-302 last (should be 99): 2.09289e-302
>>
>> Is this legal C-code (the compiler thinks it is)?
>>
>> What am I doing wrong?
>>
>> Gerriet.
>>


_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:

This email sent to email@hidden


  • Follow-Ups:
    • Re: Strange behaviour of iPhone
      • From: "Mills, Steve" <email@hidden>
References: 
 >Strange behaviour of iPhone (From: "Gerriet M. Denkmann" <email@hidden>)

  • Prev by Date: Scroll a collection
  • Next by Date: Re: Strange behaviour of iPhone
  • Previous by thread: Strange behaviour of iPhone
  • Next by thread: Re: Strange behaviour of iPhone
  • Index(es):
    • Date
    • Thread