gpt4 book ai didi

garbage-collection - D中的垃圾收集,指针和作用域

转载 作者:行者123 更新时间:2023-12-04 07:58:25 26 4
gpt4 key购买 nike

提前很长的歉意-我认为我遇到了一个问题,可能与垃圾收集有关。

我有一个包装DMDScript的类,如下所示:

/**
* Wrapper class for the DMDScript
*/
class ScriptingHost
{
protected static CallContext *cc ; // Call Context for interaction with the script.
protected static Program prg ; // Reference to program object (this is where the script buffer gets parsed)

static this()
{
// create our program instance
prg = new Program();

// create reference to call Context
cc = prg.callcontext;

Stdout( "cc.global: " )( cc.global ).newline ;

// add some built-in functions, like trace() and trigger()
DnativeFunction dnfTrace = new DnativeFunction( &jsTrace, "trace", 0, Dfunction.getPrototype() ) ;
DnativeFunction dnfTrigger = new DnativeFunction( &jsTrigger, "trigger", 0, Dfunction.getPrototype() ) ;

// add it to the call context
cc.global.Put("trace", dnfTrace , 0);
cc.global.Put("trigger", dnfTrigger , 0);
}

/***********************************************************************
* Helper functions for D<-->JS interaction
************************************************************************/

/**
* Trace (output)
*/
protected static void* jsTrace( Dobject pthis, CallContext* cc, Dobject othis, Value* ret, Value[] arglist)
{
Stdout( "<<" )( arglist ).newline ;
return null;
}

/**
* Trigger
*/
protected static void* jsTrigger( Dobject pthis, CallContext* cc, Dobject othis, Value* ret, Value[] arglist)
{
Stdout( "<<" )( arglist ).newline ;
return null;
}
}


到目前为止,一切都很好,我可以没有错误地运行代码。
输出:

cc.global: dmdscript_tango.dglobal.Dglobal


我还向ScriptingHost添加了一个跟踪cc.global对象的方法:

public static void testGlobal()
{
Stdout( "testGlobal: " )( cc.global ).newline.flush ;
}


...也可以正常工作-当我尝试从类ala外部访问它时,就会出现问题:

int main()
{
Stdout( "DMDScriptTest" ).newline ;
ScriptingHost.testGlobal() ;
Stdout( "global: " )( ScriptingHost.global() ).newline.flush ;
ScriptingHost.testGlobal() ;
}


然后我得到以下错误:

cc.global: dmdscript_tango.dglobal.Dglobal
DMDScriptTest
testGlobal: dmdscript_tango.dglobal.Dglobal
object.Exception: Illegal Instruction
----------------
[ 5fd264] 0+0 ??? @0+1975211 :0
[ 404e05] 0+0 tango.text.convert.Layout.Layout!(char).Layout.parse.process @0+29 c:\dmd\dmd\bin\..\import\tango\text\convert\Layout.d:595
[ 404875] 0+0 tango.text.convert.Layout.Layout!(char).Layout.parse @0+65 c:\dmd\dmd\bin\..\import\tango\text\convert\Layout.d:603
[ 40463b] 0+0 tango.text.convert.Layout.Layout!(char).Layout.convert @0+34 c:\dmd\dmd\bin\..\import\tango\text\convert\Layout.d:347
[ 40418e] 0+0 tango.io.stream.Format.FormatOutput!(char).FormatOutput.print @0+67 c:\dmd\dmd\bin\..\import\tango\io\stream\Format.d:172
[ 40206c] 0+0 __Dmain @0+45 test2.d:87
[ 4380b5] 0+0 rt.compiler.dmd.rt.dmain2.main.runMain @0+119292 :0
[ 43800b] 0+0 rt.compiler.dmd.rt.dmain2.main.tryExec @0+119122 :0
[ 4380f3] 0+0 rt.compiler.dmd.rt.dmain2.main.runAll @0+119354 :0
[ 43800b] 0+0 rt.compiler.dmd.rt.dmain2.main.tryExec @0+119122 :0
[ 437fc3] 0+0 _main @0+119050 :0
[ 44c980] 0+0 _mainCRTStartup @0+203463 :0
[75e133c8] 0+0 ??? @0+1973388559 :0
[76f49ed0] 0+0 ??? @0+1991438359 :0
[76f49ea0] 0+0 ??? @0+1991438311 :0
global: unittest start
unittest end


有谁能够在这里阐明这个问题,请问如何解决? :)

编辑:我正在使用Windows D1-Tango设置。我使用的版本是0.99.9 Tango / DMD 1.056 Kai捆绑包。

谢谢,

最佳答案

首先,您使用的是哪个操作系统?基于我正在猜测Windows的错误?您正在使用哪个版本的dmd / tango? 32位还是64位?尝试通过反汇编程序运行您的应用程序,并查看5fd264中列出了什么指令(搜索输出)。我们应该能够通过上述一些信息提供更多帮助。

关于garbage-collection - D中的垃圾收集,指针和作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6657002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com