Problem instantiating an array of objects or array of class instances

R

raylopez99

Below is my problem. I've narrowed it down to one thing: my
unfamiliarity on how class instances are instantiated in an array.
This is because the "un-array" / "non-array" version of the program
works fine (see below). So what is the problem? I get a null
reference on the line below at *!&!* "Unhandled Exception:
System.NullReferenceException: Object reference not set to
an instance of an object.?

RL


static void Main(string[] args)
{

int Array_Max1 = 5; // the size of the array

NodeTreeMgr[] myNodeTreeMgr = new NodeTreeMgr[Array_Max1];
//the array version of the class (compiles but gets runtime error)
// the problem is perhaps here--somehow the 'new' is not working in
this array

NodeTreeMgr mySingleNodeTreeMgr = new NodeTreeMgr();
// the non-array version of the class (works fine)

MyClass rootClass = new MyClass(123); //unimportant nested
class

Node[] myrootnode = new Node[Array_Max1];
// a class on the "LHS" of the "=" below

Node[] myBADrootnode = new Node[Array_Max1];
//same as previous line

for (int i = 0; i < 5; i++) //start of loop
{

myrootnode =
mySingleNodeTreeMgr.TheNodeTree.NodeFactory(rootClass);
//works fine in runtime--since the RHS is a "non-array"

Console.WriteLine("success! myrootnode[{0}].child_TorF is {1}", i,
myrootnode.child_TorF); //works fine, returns a member bool
"false"

// start of problem code: *!&!* next line a problem, exception is
thrown

myBADrootnode =
myNodeTreeMgr.TheNodeTree.NodeFactory(rootClass);

// if the above line is commented out, program works fine (loop runs
five times)

Console.WriteLine("NO success! WON'T WORK! (runtime
error): myBADrootnode[{0}].child_TorF is {1}", i,
myBADrootnode.child_TorF); //doesn't work

}

}

////////// output

success! myrootnode[0].child_TorF is False

Unhandled Exception: System.NullReferenceException: Object reference
not set to
an instance of an object.

Press any key to continue . . .

/////////////////////// FYI OTHER CLASSES BELOW /////

class NodeTreeMgr
{
public NodeTree TheNodeTree;

public Node NodeFactory(MyClass MyClaPass) //standard "Node
factory" class
{
Node returnNode = new Node();
returnNode.Val = MyClaPass;
return returnNode;
}
}

///////////////////////

class Node
{
public bool child_TorF;

public Node()
{
child_TorF = false;
}

}

private MyClass val; //val needed for below "Val"
public MyClass Val
{
get
{
return val;
}
set
{
val = value; //taking advantage of 'special variable
'value'
}
}

}

public class MyClass
{
public int j; public String STR1;
public MyClass() { STR1 = "hi"; j = 1; }
public MyClass(int jj) { j=jj;}
}

///////////////////////
 
J

Jon Skeet [C# MVP]

Below is my problem. I've narrowed it down to one thing: my
unfamiliarity on how class instances are instantiated in an array.
This is because the "un-array" / "non-array" version of the program
works fine (see below). So what is the problem? I get a null
reference on the line below at *!&!* "Unhandled Exception:
System.NullReferenceException: Object reference not set to
an instance of an object.?

RL

static void Main(string[] args)
{

int Array_Max1 = 5; // the size of the array

NodeTreeMgr[] myNodeTreeMgr = new NodeTreeMgr[Array_Max1];
//the array version of the class (compiles but gets runtime error)
// the problem is perhaps here--somehow the 'new' is not working in
this array

The problem is that this creates an array of the given size, but
doesn't populate it - or rather, it fills it with null references.

If you want each element to be an instance of NodeTreeMgr, you need
something like:

for (int i=0; i < myNodeTreeMgr.Length; i++)
{
myNodeTreeMgr = new NodeTreeMgr();
}

Jon
 
R

raylopez99

NodeTreeMgr[] myNodeTreeMgr = new NodeTreeMgr[Array_Max1];
//the array version of the class (compiles but gets runtime error)
// the problem is perhaps here--somehow the 'new' is not working in
this array

The problem is that this creates an array of the given size, but
doesn't populate it - or rather, it fills it with null references.

If you want each element to be an instance of NodeTreeMgr, you need
something like:

for (int i=0; i < myNodeTreeMgr.Length; i++)
{
myNodeTreeMgr = new NodeTreeMgr();

}

Jon


Thanks Jon!

Dang, you're good! I see you all over the place, answering questions
from as far back as 2005. I would send you money if I could! (and if
you only had a nickel every time you've answered...)

THanks again,

RL
 
J

Jon Skeet [C# MVP]

raylopez99 said:
Dang, you're good! I see you all over the place, answering questions
from as far back as 2005. I would send you money if I could! (and if
you only had a nickel every time you've answered...)

Back earlier than that, in fact - although I'm sure others (eg Nick
Paldino) were involved in C# long before I was.

No need for money though - I've always benefitted *enormously* from the
newsgroup. I reckon the best way to learn things is to find out the
answers to questions other people ask :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top