Sponsored Content
Full Discussion: Problem with linked lists
Top Forums Programming Problem with linked lists Post 302276724 by brinch on Wednesday 14th of January 2009 12:58:31 PM
Old 01-14-2009
Problem with linked lists

I am working on a problem for which I need to use a linked list of a sort. For this particular application I need each node to refer to a set of other nodes.
A simplified version of the code looks as follows:
Code:
#include <stdio.h>
#include <stdlib.h>

struct record {
  int id;
  struct record **friends;
};

int main(){
    int i;
    struct record *data;

/* This uncommented piece of code works as it is supposed to */
//  data=malloc(3*sizeof(struct record));
//  data[0].friends=malloc(2*sizeof(struct record));    
//  for(i=0;i<3;i++) data[i].id=i;
//  data[0].friends[0]=&data[1];
//  printf("%d %d\n", data[0].id, data[0].friends[0]->id);  

    subroutine(&data);
}

void subroutine(struct record **data){
    int i;
    
/* This piece of code produces a wrong output */
    *data=malloc(3*sizeof(struct record));
    (*data)[0].friends=malloc(2*sizeof(struct record));
    for(i=0;i<3;i++) (*data)[i].id=i;
    (*data)[0].friends[0]=data[1];
    printf("%d %d\n", (*data)[0].id, (*data)[0].friends[0]->id);  
}

A successful run results in the printing of "0 1". The uncommented code in main() gives the correct result, but if I pass the data to the subroutine, I get something weird. Can anybody help me?
 

5 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell Script to Create non-duplicate lists from two lists

File_A contains Strings: a b c d File_B contains Strings: a c z Need to have script written in either sh or ksh. Derive resultant files (File_New_A and File_New_B) from lists File_A and File_B where string elements in File_New_A and File_New_B are listed below. Resultant... (7 Replies)
Discussion started by: mlv_99
7 Replies

2. Programming

this code for addind polynomials using linked lists showed segmentation error..any help pls..

the error occurs in the function() "add" used... #include<stdio.h> #include<malloc.h> struct node { int exp; int coef; struct node * link; }; struct node * create_list(struct node *,int,int); void display(struct node *); struct node * add(struct node *,struct node *); ... (3 Replies)
Discussion started by: mscoder
3 Replies

3. UNIX for Dummies Questions & Answers

Linked Servers

Hi, We have 2 UNIX Servers, say test1 and test2. Here, if I create a file or folder/delete a file or folder in the 1st server, it gets reflected automatically in the 2nd server. I don't think any links are established between these 2 servers. Both these have 2 different hostnames. How... (1 Reply)
Discussion started by: Dev_Dev
1 Replies

4. Programming

unidirectional linked list pointer problem

I am trying to test some operations on a directed list. However, the declaration of a pointer is giving me trouble. I seem to have done something incorrectly because I get an error: "listtest.c:29: warning: 'p' may be used uninitialized in this function" Can anyone help? This is my code... (6 Replies)
Discussion started by: bluetxxth
6 Replies

5. Programming

Help with linked list.

#include<stdio.h> #include<stdlib.h> struct LinkedList { int val; struct LinkedList *next; }node; /*Creating a structure variable*/ typedef struct LinkedList Node; Node *start = NULL; int create(int i) { Node *temp = NULL; if (start == NULL) ... (5 Replies)
Discussion started by: prinsh
5 Replies
SCANDIR(3)						   BSD Library Functions Manual 						SCANDIR(3)

NAME
scandir, scandir_b, alphasort -- scan a directory SYNOPSIS
#include <sys/types.h> #include <dirent.h> int scandir(const char *dirname, struct dirent ***namelist, int (*select)(const struct dirent *), int (*compar)(const struct dirent **, const struct dirent **)); int alphasort(const struct dirent **d1, const struct dirent **d2); int scandir_b(const char *dirname, struct dirent ***namelist, int (^select)(const struct dirent *), int (^compar)(const struct dirent **, const struct dirent **)); DESCRIPTION
The scandir() function reads the directory dirname and builds an array of pointers to directory entries using malloc(3). It returns the num- ber of entries in the array. A pointer to the array of directory entries is stored in the location referenced by namelist (even if the num- ber of entries is 0). The select argument is a pointer to a user supplied subroutine which is called by scandir() to select which entries are to be included in the array. The select routine is passed a pointer to a directory entry and should return a non-zero value if the directory entry is to be included in the array. If select is null, then all the directory entries will be included. The compar argument is a pointer to a user supplied subroutine which is passed to qsort(3) to sort the completed array. If this pointer is null, the array is not sorted. The alphasort() function is a routine which can be used for the compar argument to sort the array alphabetically. The memory allocated for the array can be deallocated with free(3), by freeing each pointer in the array and then the array itself. The scandir_b() function works the same way as the scandir() function, except that select and compar are blocks instead of subroutines. DIAGNOSTICS
Returns -1 if the directory cannot be opened for reading or if malloc(3) cannot allocate enough memory to hold all the data structures. SEE ALSO
directory(3), malloc(3), qsort(3), dir(5) HISTORY
The scandir() and alphasort() functions appeared in 4.2BSD. The scandir_b() function appeared in Mac OS X 10.6. BSD
May 20, 2008 BSD
All times are GMT -4. The time now is 03:04 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy