449,264 Members | 1,767 Online 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
4 Replies

 P: n/a "negative" writes: The problem is that i get a segmentation fault every time i try toaccess the queue of the tree node. Here is the code i use to start thetree : 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, // 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. 