OT: What causes the Segfault in the following?

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Aug 3 18:44:11 PDT 2017


On 8/3/17 9:12 PM, Andrew Edwards wrote:
> Andrew Edwards wrote:
>> int main()
>> {
>>     //int wierd[4];
>>     struct nk_color str = nk_rgba_hex("#deadbeef");
>>     //int wierd[4];
>>     char *s;
>>     //int wierd[4];
>>     nk_color_hex_rgb(s, str);
>>     //int wierd[4];
>>     printf("(%d,%d,%d)\n",str.r, str.g, str.b);
>>     //int wierd[4];
>>     printf("%s\n", s);
>>     //int wierd[4];
>>     return 0;
>> }
>>
>> The above produces as its output:
>>
>> (222,173,190)
>> DEADBE
>>
>> but if I introduce an int array on any of the commented lines, it
>> results in a runtime Segmentation fault: 11. Basically I'm just trying
>> to port Nuklear[1] to D as a first project after reading Ali and Mike's
>> awesome books. Moving one function at a time to an independent C file,
>> compiling it to observe the result and then from the understanding
>> gained, re-implementing it in D. The int array here is introduced to
>> prepare for port of the next function and has nothing to do with the
>> current content of main(), but I'm completely confused because I don't
>> see anything wrong with the code that is causing the error.
>>
>> By the way, the program responds differently based on the type of the
>> array:
>>
>>     double => Bus error: 10
>>     char => no error
>>     short => Segmentation fault: 11
>>     long => Bus error: 10
>>
>> Obviously I'm missing something... please enlighten me.
>>
>> Thanks,
>> Andrew
>>
>> [1] Yes, I know there is already a port and bindings available... this
>> is purely for learning. My goal is actually to port imgui for a project
>> I committed myself to at DConf2017 but in the process of doing so, I
>> realized how woefully inadequate my knowledge of programming is. This is
>> my attempt at rectifying the situation.
> 
> Just in case... here are the two functions being called in main():
> 
> https://github.com/vurtun/nuklear/blob/master/nuklear.h#L5695-L5722

Can you show how you declared these in D? It's important. I think what's 
happening is that the nk_color_hex_rgb is incorrectly defined. I think 
you should *always* get segfault, with or without any of those arrays.

-Steve


More information about the Digitalmars-d-learn mailing list