writeln() assertion failed in hybrid x64
Szymon Gatner via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Sep 3 11:47:59 PDT 2014
On Wednesday, 3 September 2014 at 09:55:55 UTC, Szymon Gatner
wrote:
> Hey,
>
> I am trying to build hybrid (C++, D) application (more here:
> http://forum.dlang.org/thread/ugkpqprobonorbdunxsx@forum.dlang.org)
> but I am now getting assertion failure from within writeln().
> writeln() is called from a D function that has C++ linkage:
>
> D definition:
>
> extern (C++) void printSomething()
> {
> writeln("hello from D");
> }
>
>
> usage from C++:
>
> extern "C++" void printSomething();
>
> int main()
> {
> DRuntime druntime; // rt_init(), rt_term()
> printSomething();
> }
>
> this causes run-time assertion in fprintf() called from within
> writeln():
>
> int __cdecl fprintf (
> FILE *str,
> const char *format,
> ...
> )
> /*
> * 'F'ile (stream) 'PRINT', 'F'ormatted
> */
> {
> va_list(arglist);
> FILE *stream;
> int buffing;
> int retval=0;
>
> _VALIDATE_RETURN( (str != NULL), EINVAL, -1); <=== assetion
> here
>
> [...]
> }
>
> meaning that str arg passed is null. writelns()'s call site:
>
> enforce(fprintf(.stdout._p.handle, "%.*s\n",
> cast(int) args[0].length, args[0].ptr)
> >= 0);
>
> so for some reason .stdout._p.handle is null.
Any ideas why this happens?
More information about the Digitalmars-d-learn
mailing list