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

Simen Kjaeraas simen.kjaras at gmail.com
Sun Oct 28 14:16:19 PDT 2012


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.

-- 
Simen


More information about the Digitalmars-d-learn mailing list