Problem with interfacing C code to D

bioinfornatics bioinfornatics at fedoraproject.org
Mon Jan 9 16:02:54 PST 2012


Dear i do not understand why the first example works and the second
segfault. Thanks

----------------EXAMPLE 1 -------------------
// ldc2 -L=/usr/lib64/libXlib.so -L-lX11 -g -w xtest.d 
import std.string;
import std.stdio;
import std.conv;
import std.c.stdlib : getenv;
import std.exception : Exception;

import X11.Xlib;

void main( string[] args ){
    Display* display = XOpenDisplay(getenv("DISPLAY"));
    if( display is null )
        new Exception( "Could not communicate with X server" );
    int counter;
    string pattern = "*\0";
    char** fonts   = XListFonts( display, pattern.dup.ptr, 10, &counter
);
    for(int c = 0; c < counter; c++)
        writeln( to!string( fonts[c] ) );
}


----------------EXAMPLE 2 -------------------
// ldc2 -L=/usr/lib64/libXlib.so -L-lX11 -g -w xtest.d 
import std.string;
import std.stdio;
import std.conv;
import std.c.stdlib : getenv;
import std.exception : Exception;

import X11.Xlib;

void main( string[] args ){
    Display display = *XOpenDisplay(getenv("DISPLAY"));
    if( display is null )
        new Exception( "Could not communicate with X server" );
    int counter;
    string pattern = "*\0";
    char** fonts   = XListFonts( &display, pattern.dup.ptr, 10, &counter
);
    for(int c = 0; c < counter; c++)
        writeln( to!string( fonts[c] ) );
}



More information about the Digitalmars-d-learn mailing list