Δημοσιεύτηκε: 05 Ιούλ 2011, 23:50
από Star_Light
migf1 έγραψε:
Star_Light έγραψε:Λοιπον εχω 2 αποριουλες ...
[snip]
Καταρχην γιατι δεν μου δουλευει η συναρτηση???? :/

Γιατί την έχεις κάτω από την main(). Ή θα πρέπει να την βάλεις πάνω από την main() ολόκληρη ή να βάλεις πάνω από τη main() το πρότυπο της print_list().

έγραψε:Κατα δευτερον εχουμε πει πως ο δεικτης head εδω (list) στους κωδικες του migf1 δεν ειναι ο ιδιος κομβος
αλλα ειναι ενας δεικτης που δειχνει σε εναν κομβο... ωραια τοτε αυτο εδω γιατι
head->next=one;

εχει πεδιο next???

Αν το κάνεις malloc() / calloc() το ίδιο το head, τότε ναι έχει πεδίο next (και πεδίο id). Αν δεν το κάνεις malloc() / calloc() και απλά το βάλεις να δείχνει σε έναν άλλνο ήδη malloc'ed() / calloc'ed κόμβο, τότε το head->next αναφέρεται στο πεδίο next του κόμβου στον οποίον δείχνει ο head.

Ελπίζω να μη σε μπέρδεψα χειρότερα.

ΥΓ. Θέλω να πω πως είσαι από τα λίγα άτομα που έχω βρει στο Ίντερνετ να κάνουν τόσο εύστοχες ερωτήσεις σχετικά με τους δείκτες :)


OK! Aλλα τωρα μου πεταει segmentation fault πχ

Κώδικας: Επιλογή όλων


/*==========================================================
YLOPOIHSH LISTAS ME SUNARTHSEIS

5/7/11

==========================================================
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct customer /*xreiazetai kai i leksi customer wste na kserei mesa sto swma
tou se ti tupo anaferetai o deiktis next */
{
int id;
struct customer *next;
} Customer;

void list_print(Customer *head);
int main ()
{
Customer *head;

head = NULL;

{
head= calloc(1,sizeof(Customer));
head->id=1;
head->next = NULL;
}

while(head!=NULL)
{
printf("%d", head->id);
head=head->next;
}
void list_print(Customer *head);


free(head->next); /* epeidi to head itan hdh katestrameno dn borousa meta na dwsw px */
free(head); /* free(head->next) */

if(head==NULL)
printf("H free dn ekane kala tin douleia tis \n");
else
printf("H mnimi eleutherwthike!");


return 0;
}
void list_print(Customer *head)
{
for(head=NULL; head->next; head=head->next)
{
printf("%d", head->id);
}
putchar('\n');
return;
}




Ειπα να "καθαρισω" λιγο τον κωδικα εννοωντας πως να βγαλω αυτο που θα επρεπε να οριζω συνεχως κομβους ας πουμε ...
αλλα στην for μου κανει ενα segmentation fault. Αυτη τη στιγμη εγω εχω βαλει τον head να δειχνει στον κομβο του 1 ή στον κομβο που διαθετει ενα πεδιο id 1 ωραια???? το head->next εδω ειναι NULL.

Και εξηγω θελω να ξεκινησω απο τον βρωμοδεικτη που δειχνει στο NULL (ok πλακα κανω λολ)
μεχρι το head->next που ειναι NULL Και αρα τερματιζει τοτε κανε head=head->next ωραια???
γιατι πεταει σφαλμα μνημης.... αυτο συμβαινει και αμα δωσω while(head) ή αμα δωσω πχ head->next!=NULL στο 2ο της for.

Mπορει να κανω καλες ερωτησεις αλλα εκεινο που με προβληματιζει ειναι οτι σαν να μπερδευεται το μυαλο μου και να μην μπορω να συνταξω κωδικα??? τεσπα θα δουμε ειναι νωρις ακομα...