# Undefined variable values

This topic is 4807 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

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.

##### Share on other sites
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?

##### Share on other sites
Quote:
 Original post by WitchLordDidn'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).

##### Share on other sites
I'll fix this as soon as possible. Thanks for sending me a test case that reproduces the problem.

##### Share on other sites
I'll fix this as soon as possible. Thanks for sending me a test case that reproduces the problem.

Thank's !

##### Share on other sites
1.9.2a not only solved the problem, but show me that I was using undefined variable values in other scripts !
Thank's

##### Share on other sites
Excellent. [smile]

Thanks for confirming the fix.

##### Share on other sites

This topic is 4807 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Create an account

Register a new account

• ### Forum Statistics

• Total Topics
628645
• Total Posts
2984015

• 9
• 9
• 10
• 21
• 20