469,299 Members | 2,073 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,299 developers. It's quick & easy.

Problem instantiating an array of objects or array of class instances

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[i] =
mySingleNodeTreeMgr.TheNodeTree.NodeFactory(rootCl ass);
//works fine in runtime--since the RHS is a "non-array"

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

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

myBADrootnode[i] =
myNodeTreeMgr[i].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[i].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;}
}

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

Sep 13 '07 #1
3 6146
On Sep 13, 4:49 pm, raylopez99 <raylope...@yahoo.comwrote:
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[i] = new NodeTreeMgr();
}

Jon

Sep 13 '07 #2
On Sep 13, 8:55 am, "Jon Skeet [C# MVP]" <sk...@pobox.comwrote:
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[i] = 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

Sep 13 '07 #3
raylopez99 <ra********@yahoo.comwrote:
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 :)

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Sep 17 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by James | last post: by
3 posts views Thread by Nathan Sokalski | last post: by
19 posts views Thread by Chocawok | last post: by
7 posts views Thread by heddy | last post: by
17 posts views Thread by =?Utf-8?B?U2hhcm9u?= | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
1 post views Thread by Geralt96 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.