Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   Problem with tree and enhanced queue. (http://www.velocityreviews.com/forums/t440772-problem-with-tree-and-enhanced-queue.html)

negative 01-05-2006 01:18 PM

Problem with tree and enhanced queue.
 
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.


Chris McDonald 01-05-2006 01:36 PM

Re: Problem with tree and enhanced queue.
 
"negative" <panos84@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.

Ian Malone 01-05-2006 01:36 PM

Re: Problem with tree and enhanced queue.
 
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

Roland Csaszar 01-05-2006 01:40 PM

Re: Problem with tree and enhanced queue.
 
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:roland.csaszar@knapp.com

negative 01-05-2006 02:03 PM

Re: Problem with tree and enhanced queue.
 

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



All times are GMT. The time now is 09:50 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.