extern (C) function call with const char * type will sometimes generate seg fault or core dump.
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Oct 15 23:56:19 PDT 2014
On 10/15/2014 08:18 PM, dysmondad wrote:
> Since I've added this call, my program will sometimes but not always
> either generate a core dump or a seg fault. It seems that the issue is
> with the const char * parameter.
>
> I don't have a good grasp of the difference between the way D and C work
> for char * types. The call to loadTexture uses a literal for the file
> name, i.e. "resources/ball.png".
>
> // d lang bindings for C function
> alias void SDL_Renderer;
> alias void SDL_Texture;
> extern (C) SDL_Texture * IMG_LoadTexture(SDL_Renderer * renderer, const
> char * file);
>
> // d lang call to extern (C) function
> SDL_Texture* loadTexture( SDL_Renderer * ren, const char * file )
> {
> SDL_Texture * loadedImage = IMG_LoadTexture( ren, file );
> return loadedImage;
> }
I wouldn't expect to see strings represented as 'const char *' on D
side. The more convenient and safer option is to use 'string' on the D
side and pass it through toStringz() before calling C.
The D function now takes 'string' and calls toStringz() on it:
SDL_Texture* loadTexture( SDL_Renderer * ren, string file )
{
SDL_Texture * loadedImage = IMG_LoadTexture( ren, file.toStringz);
return loadedImage;
}
However, note the lifetime issue:
http://dlang.org/phobos/std_string.html#.toStringz
Ali
More information about the Digitalmars-d-learn
mailing list