freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

βοηθεια σε c με λιστες


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα]      Bookmarks Tags: cΒοήθεια Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
john34516


Μέλος από: 06 Αυγ 2007
Μηνύματα: 21

View users profile
ΜήνυμαΣτις: 17 Απρ 2010 21:12    Θέμα: βοηθεια σε c με λιστες Απάντηση με παράθεση  Mark this post and the followings unread

παιδια εγραψα αυτο το πολυ απλο προγραμμα με λιστα και struct

#include <stdio.h>
#include <stdlib.h>


int i=0,n,count=1;

struct va8moi {
float firstAssignment;
float secondAssignment;
float midterm;
float final;
float finalMark;
};

struct person {
char *firstName;
char *lastName;
int idNumber;
struct va8moi *marks;
};


struct classNodeStruct {
struct person *aStudent;
struct classNodeStruct *next;
}test1;

int main (void) {
struct classNodeStruct *neo;
struct classNodeStruct *head=NULL;

neo=&test1;
neo=(struct classNodeStruct*)malloc(sizeof(struct classNodeStruct));


neo->next=head;
head=neo;
neo->aStudent->marks->secondAssignment=0;
printf("%d",head->aStudent->marks->firstAssignment);


system("PAUSE");
return 0;
}

πως μπορω να καταχωρησω αριθμο στο secondAssugnment??? επειδη ειμαι σιγουρος πως εκει σπαει το προγραμμα οταν το εκτελω.
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 18 Απρ 2010 02:29    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

O pointer astudent που έχεις στο κάθε κόμβο της λίστας δείχνει σε άκυρη μνήμη, εφόσον δεν κάνεις malloc μνήμη στο heap ούτε του δίνεις κάποια συγκεκριμένη διεύθυνση. Όταν τον κάνεις dereference λογικό είναι να σκάει το πρόγραμμα.

Επίσης μερικές γραμμές στον κώδικα δε βγάζουν νόημα αλλά αυτο δεν έχει να κάνει τόσο άμεσα με το ότι σκάει.
john34516


Μέλος από: 06 Αυγ 2007
Μηνύματα: 21

View users profile
ΜήνυμαΣτις: 18 Απρ 2010 03:36    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

δηλαδη αν προσθεσω αυτο θα ειναι ενταξει ?

neo=(struct classNodeStruct*)malloc(sizeof(struct classNodeStruct));
neo->aStudent=(struct person*)malloc(sizeof(struct person));
neo->aStudent->marks=(struct va8moi*)malloc(sizeof(struct va8moi));
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 18 Απρ 2010 11:44    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Λογικά ναι
john34516


Μέλος από: 06 Αυγ 2007
Μηνύματα: 21

View users profile
ΜήνυμαΣτις: 18 Απρ 2010 12:04    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

βασικα εγραψα αυτη την συναρτηση για εισαγωγη στοιχειων αλλα μολις εισαγω των τελευταιο αριθμο μου σκαει το προγραμμα και δεν ξανακανει επαναληψη και δεν μπορω να καταλαβω που εχω κανει λαθος

int i=0,count=1;
struct classNodeStruct *neo;
struct classNodeStruct *head=NULL;
struct classNodeStruct *current=NULL;
neo=(struct classNodeStruct*)malloc(sizeof(struct classNodeStruct));
neo->aStudent=(struct person*)malloc(sizeof(struct person));
neo->aStudent->marks=(struct va8moi*)malloc(sizeof(struct va8moi));;
neo->next=head;
head=neo;
current=neo;
while (i<n) { printf("Dwse stoixeia mathiti kai va8mous\n");
scanf("%s %s",neo->aStudent->firstName,neo->aStudent->lastName);
scanf("%f",&neo->aStudent->marks->firstAssignment);
scanf("%f",&neo->aStudent->marks->secondAssignment);
scanf("%f",&neo->aStudent->marks->midterm);
scanf("%f",&neo->aStudent->marks->final);
current=neo;
free(neo);
neo=(struct classNodeStruct*)malloc(sizeof(struct classNodeStruct));
neo->aStudent=(struct person*)malloc(sizeof(struct person));
neo->aStudent->marks=(struct va8moi*)malloc(sizeof(struct va8moi));;
current->next=neo;
neo->next=NULL;
i++;
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 19 Απρ 2010 19:33    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Ο κώδικάς σου έχει πολλά λάθη κυρίως με τους pointers, σε κάποια φάση κάνεις κάτι τέτοιο:

κώδικας:


current = neo;
//κάνεις free τη μνήμη στην οποία δείχνει και το current
free(neo);

neo = (struct classNodeStruct*) malloc ( sizeof(struct classNodeStruct));
neo->aStudent= (struct person*) malloc( sizeof(struct person));
neo->aStudent->marks= (struct va8moi*) malloc( sizeof(struct va8moi));

//segmentation fault καραμπινάτο γιατί κανεις dereference pointer o oποιός δείχνει σε
//άκυρη μνήμη
current->next = neo;



Και υπάρχουν κι άλλα παρόμοια. Οπότε ρίξε ένα καλύτερο διάβασμα στους pointers
john34516


Μέλος από: 06 Αυγ 2007
Μηνύματα: 21

View users profile
ΜήνυμαΣτις: 19 Απρ 2010 23:53    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

επιτελους καταφερα να το δουλεψω σωστα!!

ευχαριστω πολυ για τη βοηθεια.

( το μεγαλυτερο προβλημα ηταν που διαβαζα string σε δειχτη χωρις να δωσω μνημη σε αυτο το δειχτη )
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++


Σχετικά θέματα
 Θέματα   Απ/σεις   Αποστολέας   Τελευταίο μήνυμα 
ενας κωδικας σε C που βγαζει μη αναμενομενο αποτεσμα 1 teresa92 13 Αυγ 2016 21:26
teresa92 Εμφάνιση τελευταίου μηνύματος
Bitwise operators in C 3 Kappa4 15 Δεκ 2014 20:38
mariosal Εμφάνιση τελευταίου μηνύματος
 
Τώρα είναι 04 Δεκ 2016 14:14 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos