Pod type and Null pointer exception - bug with call destructor
Hello!
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
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
Thanks. I'll look into this.
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
I haven't been able to reproduce this problem. I wrote the following test:
{
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();
}
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
FDsagizi, when you say "Pod type", do you mean that the type is registered with asOBJ_CLASS_POD? POD types aren't allowed to have user-defined destructors.
http://en.wikipedia.org/wiki/Plain_old_data_structure
Not sure if that's relevant, but it might be confusing the compiler.
http://en.wikipedia.org/wiki/Plain_old_data_structure
Not sure if that's relevant, but it might be confusing the compiler.
Hmm... It was not easy to play with a simple example, I'm trying to find a more exact cause.
This bug show after Save And Load byte code!
Code: http://www.everfall.com/paste/id.php?ic54qs57asxq
Code: http://www.everfall.com/paste/id.php?ic54qs57asxq
Ah, that puts a different light on the subject. I'll investigate with the new info.
Thanks,
Andreas
Thanks,
Andreas
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
Thanks a lot. I've fixed the problem in revision 1430.
It was a flag 'dontCleanupOnException' that I had forgotten to serialize with the saved bytecode.
It was a flag 'dontCleanupOnException' that I had forgotten to serialize with the saved bytecode.
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement