Jump to content

  • Log In with Google      Sign In   
  • Create Account

- - - - -

Undefined variable values


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
7 replies to this topic

#1 abrken   Members   -  Reputation: 130

Like
0Likes
Like

Posted 09 October 2004 - 08:18 PM

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.

Sponsor:

#2 Andreas Jonsson   Moderators   -  Reputation: 3453

Like
0Likes
Like

Posted 10 October 2004 - 01:46 AM

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

#3 abrken   Members   -  Reputation: 130

Like
0Likes
Like

Posted 10 October 2004 - 08:21 PM

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).

#4 Andreas Jonsson   Moderators   -  Reputation: 3453

Like
0Likes
Like

Posted 11 October 2004 - 01:31 PM

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

#5 Andreas Jonsson   Moderators   -  Reputation: 3453

Like
0Likes
Like

Posted 11 October 2004 - 01:31 PM

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

#6 abrken   Members   -  Reputation: 130

Like
0Likes
Like

Posted 11 October 2004 - 08:55 PM

Thank's !

#7 abrken   Members   -  Reputation: 130

Like
0Likes
Like

Posted 12 October 2004 - 08:07 PM

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

#8 Andreas Jonsson   Moderators   -  Reputation: 3453

Like
0Likes
Like

Posted 13 October 2004 - 01:59 AM

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




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS