Sign in to follow this  

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.

If you intended to correct an error in the post then please contact us.

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 this post


Link to post
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 this post


Link to post
Share on other sites
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).

Share this post


Link to post
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.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this