I find bug
if comment this code
// null_object.Do();
destructor call 2 times - it is ok!
but, if we have null pointer exception
destructor call 3 times and c++ crash
http://www.everfall....hp?nt1d6pbl1rkg
Posted 25 September 2012 - 04:08 AM
Posted 03 October 2012 - 07:19 PM
Posted 07 October 2012 - 06:59 PM
{
COutStream out;
asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
engine->SetMessageCallback(asMETHOD(COutStream, Callback), &out, asCALL_THISCALL);
engine->RegisterObjectType("TestLink", sizeof(CObject), asOBJ_VALUE | asOBJ_APP_CLASS_CD);
engine->RegisterObjectBehaviour("TestLink", asBEHAVE_CONSTRUCT, "void f()", asFUNCTION(Construct), asCALL_CDECL_OBJLAST);
engine->RegisterObjectBehaviour("TestLink", asBEHAVE_CONSTRUCT, "void f(const TestLink &in)", asFUNCTION(CopyConstruct), asCALL_CDECL_OBJLAST);
engine->RegisterObjectBehaviour("TestLink", asBEHAVE_DESTRUCT, "void f()", asFUNCTION(Destruct), asCALL_CDECL_OBJLAST);
asIScriptModule *mod = engine->GetModule("mod", asGM_ALWAYS_CREATE);
mod->AddScriptSection("test",
"class Object3 \n"
"{ \n"
" Object3( TestLink str ) \n"
" { \n"
" Object3 @null_object = null; \n"
" null_object.Do(); \n"
" } \n"
" void Do() {} \n"
"} \n"
"void Main() \n"
"{ \n"
" Object3 @oo = Object3( TestLink() ); \n"
"} \n");
r = mod->Build();
if( r < 0 )
TEST_FAILED;
CObject_constructCount = 0;
CObject_destructCount = 0;
asIScriptContext *ctx = engine->CreateContext();
r = ExecuteString(engine, "Main()", mod, ctx);
if( r != asEXECUTION_EXCEPTION )
TEST_FAILED;
if( CObject_constructCount != 2 ||
CObject_destructCount != 1 )
TEST_FAILED;
ctx->Release();
if( CObject_constructCount != 2 ||
CObject_destructCount != 2 )
TEST_FAILED;
engine->Release();
}
Posted 08 October 2012 - 09:15 PM
Posted 09 October 2012 - 08:54 AM
Posted 10 October 2012 - 07:03 PM
Posted 11 October 2012 - 06:48 PM