Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Problem with tree and enhanced queue.

Reply
Thread Tools

Problem with tree and enhanced queue.

 
 
negative
Guest
Posts: n/a
 
      01-05-2006
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.

 
Reply With Quote
 
 
 
 
Chris McDonald
Guest
Posts: n/a
 
      01-05-2006
"negative" <(E-Mail Removed)> 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.
 
Reply With Quote
 
 
 
 
Ian Malone
Guest
Posts: n/a
 
      01-05-2006
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
 
Reply With Quote
 
Roland Csaszar
Guest
Posts: n/a
 
      01-05-2006
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// - (E-Mail Removed)
 
Reply With Quote
 
negative
Guest
Posts: n/a
 
      01-05-2006

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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
jdk 1.5 enhanced for loop, Iterable and arrays Remi Bastide Java 5 03-29-2010 11:28 AM
Cisco 2950 with enhanced software question/problem Stohon Cisco 6 03-15-2006 09:12 AM
Security Enhanced Linux and Mandatory Access Control Imhotep Computer Security 0 10-21-2005 03:59 AM
New and enhanced low cost C compilers Chris Stephens C Programming 0 01-25-2005 11:33 AM
B tree, B+ tree and B* tree Stub C Programming 3 11-12-2003 01:51 PM



Advertisments