Undefined variable values

Started by
6 comments, last by WitchLord 19 years, 6 months ago
Hello, First : This is not a bug ! Well, I've done upgrading to 1.9.2 and running my application in debug mode I have found a different behaviour than in release mode. So I have looked at my scripts and found that the problem came from there. In my script I wasn't initializing a variable, and found that in release mode my uninitialized var has magicaly the value that make the script run, but in debug mode, the value wasn't magicaly the same. Invastigating in the scripts beeing called before the one that cause the problem, I have found that the magic value was assigned to a var (same type, same name) in release mode, but not in debug mode. Also if I insert a var declaration, the magic value is not assigned. example:

void firstfunc()
{
  bool bWhat;
  int iVar;

  ...

  iVar = 50;
}

void secondfunc()
{
  CClass theClass;
  int iVar;
  // if typed : int iDummy, iVar then iVar do NOT get the value

  // In release mode iVar = 50 in debug mode iVar = undefined value
  ...

}

then in C++ I call firstfunc and then, secondfunc
I think this is because of a stack beeing shared between functions ? The question is : How/Why in the second function the variable get initialized ? I prefer that variables are unitialized because it can lead to think that a function works correctly, but it's not, it's just about magic ! AbrKen.
Advertisement
What's happening is that the stack is reused, and in your second function the variable just happens to be on the same location as in the first function. This could have happened in C++ as well.

Variables are not initialized automatically, except for pointers that are set to 0.

Didn't the compiler warn that the variable wasn't initialized before use?

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

Quote:Original post by WitchLord
Didn't the compiler warn that the variable wasn't initialized before use?


No, and this is a modification of teststdcall4args that will show you :
class CMyOut : public 	COutStream{public :	virtual void Write(const char *text) {printf("%s\n", text);};};bool TestStdcall4Args(){	bool ret = false;	CMyOut outStr;	asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);	engine->RegisterGlobalFunction("void cfunction(int, float, double, int)", asFUNCTION(cfunction), asCALL_STDCALL);	engine->ExecuteString(0, "int i1; cfunction(i1, 1.92f, 3.88, 97)", &outStr, 0);		if (!called) {		printf("\n%s: cfunction not called from script\n\n", TESTNAME);		ret = true;	} else if (!testVal) {		printf("\n%s: testVal is not of expected value. Got (%d, %f, %f, %c), expected (%d, %f, %f, %c)\n\n", TESTNAME, t1, t2, t3, t4, 10, 1.92f, 3.88, 97);		ret = true;	}	engine->Release();	engine = NULL;	return ret;}


this result in only the test to fail because i1 is not initialized to the correct value (10).
I'll fix this as soon as possible. Thanks for sending me a test case that reproduces the problem.

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'll fix this as soon as possible. Thanks for sending me a test case that reproduces the problem.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

Thank's !
1.9.2a not only solved the problem, but show me that I was using undefined variable values in other scripts !
Thank's
Excellent. [smile]

Thanks for confirming the fix.

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