By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,264 Members | 1,767 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,264 IT Pros & Developers. It's quick & easy.

Problem with tree and enhanced queue.

P: n/a
Dear all,

I want to create a tree, where every node has an undetermined number
of children (during the population of the tree, the exact number of
children of each node , will become clear). So i thought that i could
use in each node a queue in which we will add, every time a new child
is born, the address of this node. Here are the structures i have used:

// The queue node. Every node contains a pointer to a tree node and a
pointer to the next
// element of the queue
typedef struct queue_tag {
struct TreeNode_tag * child_ptr;
struct queue_tag * next;
} QueueNode;

// the queue
typedef struct {
QueueNode *head;
QueueNode *tail;
} queue;

// the tree. Every leaf contains an integer i and a queue which
contains the pointers to node's children
typedef struct TreeNode_tag {
int i;
queue *q;
} TreeNode;

// The tree
typedef TreeNode * tree;

The problem is that i get a segmentation fault every time i try to
access the queue of the tree node. Here is the code i use to start the
tree :

tree *t;
*t = (TreeNode *)malloc(sizeof(TreeNode));

(*t)->i = 0; // a random value
(*t)->q->head = NULL; // initially the node has no children.
(*t)->q->tail = NULL;

I use gcc.

Thank you for your time.

Jan 5 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a
"negative" <pa*****@gmail.com> writes:
The problem is that i get a segmentation fault every time i try to
access the queue of the tree node. Here is the code i use to start the
tree : tree *t;
*t = (TreeNode *)malloc(sizeof(TreeNode));


Where have you allocated space for the tree's queue? I think you require:

*t = malloc(sizeof(TreeNode));
(*t)->q = malloc(sizeof(Queue));

--
Chris.
Jan 5 '06 #2

P: n/a
negative wrote:
Dear all,

<snip>

// the tree. Every leaf contains an integer i and a queue which
contains the pointers to node's children
typedef struct TreeNode_tag {
int i;
queue *q;
} TreeNode;

// The tree
typedef TreeNode * tree;

The problem is that i get a segmentation fault every time i try to
access the queue of the tree node. Here is the code i use to start the
tree :

tree *t;
*t = (TreeNode *)malloc(sizeof(TreeNode)); No bearing on your problem, but the cast is unnecessary and
sizeof( *t ) (brackets optional) is often preferred to sizeof(TreeNode)
since it's harder to get wrong.

(*t)->i = 0; // a random value
(*t)->q->head = NULL; // initially the node has no children.
(*t)->q->tail = NULL;


(*t)->q is an uninitialised pointer.

--
imalone
Jan 5 '06 #3

P: n/a
Hi,

At 5 Jan 2006 05:18:11 -0800,
negative wrote:
// The tree
typedef TreeNode * tree;

The problem is that i get a segmentation fault every time i try to
access the queue of the tree node. Here is the code i use to start the
tree :

tree *t; This is the same as
TreeNode **t;

Well, you got some errors here.
*t = (TreeNode *)malloc(sizeof(TreeNode));


Why did you do a typedef, when you are using this instead of
*t = (tree) malloc (sizeof (TreeNode));

Here you (try) initialize the value t points to with something, but
t points to some random place in memory. You should have done something
like
t = (tree *) malloc (sizeof (tree));
first.
Regards,
Roland
--
Roland Csaszar ----------- \\\ /// -------------- +43 316 495 2129
Software Development ------ \\\ /// ----------- http://www.knapp.com
KNAPP Logistics Automation - \\V// - mailto:ro************@knapp.com
Jan 5 '06 #4

P: n/a

Chris McDonald wrote:
Where have you allocated space for the tree's queue? I think you require:

*t = malloc(sizeof(TreeNode));
(*t)->q = malloc(sizeof(Queue));

--
Chris.


thanks Chris

This was finally the problem. I had forgotten to allocate space for
the tree's queue.

Negative...

Jan 5 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.