What is the proper way to handle pointers in variable arguments list?

Tyro[17] nospam at home.com
Sun Oct 28 14:38:44 PDT 2012


On 10/28/12 5:16 PM, Simen Kjaeraas wrote:
> On 2012-08-28 22:10, Tyro[17] <nospam at home.com> wrote:
>
>> On 10/28/12 4:44 PM, Dmitry Olshansky wrote:
>>> On 29-Oct-12 00:36, Tyro[17] wrote:
>>>> The following fails because the compiler assumes I am trying to
>>>> dereference non-pointer variables. Can this be done?
>>>>
>>>> void main()
>>>> {
>>>>      int i;
>>>>      int* pi;
>>>>      double d;
>>>>      double* pd;
>>>>      char c;
>>>>      char* pc;
>>>>
>>>>      scan(i, pi, d, pd, c, pc);
>>>> }
>>>>
>>>> void scan(A...)(ref A data)
>>>> {
>>>>      import std.traits;
>>>>      foreach (element; data) {
>>>>          if(isPointer!(typeof(element)) &&
>>>> isIntegral!(typeof(*element))) {
>>>>              *element = 10;
>>>>          }
>>>>      }
>>>> }
>>>>
>>>> Thanks
>>>
>>> Well, first things first:
>>> if ---> static if
>>>
>>
>> Changing it to static allows compilation, however I get the following
>> runtime error:
>>
>>      "Segmentation fault: 11"
>>
>> This happens whether I try to read from *element or modify it.
>
> I assume you've actually initialized the pointers to something?
>
> Given the above code, all the pointers point to null, and a segfault
> would be a reasonable reaction.
>

Wow, so obvious yet so obviously overlooked... *banging my head on the 
monitor*

Thanks


More information about the Digitalmars-d-learn mailing list