Problem with tree and enhanced queue.

N

negative

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

Chris McDonald

negative said:
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));
 
I

Ian Malone

negative said:
Dear all,

// 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.
 
R

Roland Csaszar

Hi,

At 5 Jan 2006 05:18:11 -0800,
negative said:
// 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
 
N

negative

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

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

thanks Chris

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

Negative...
 

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

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top