Theofaman wrote:
Καταλαβαίνω ότι αυτό είναι το προβλημα αλλά δεν μπορώ να το λύσω
Δηλαδή προσπαθώ αντί να κάνω lnode->val = line να κάνω πχ lnode->val = *line για να παρω το περιεχόμενο και να μην δειχνει στο line το val.
Τα char arrays (και όλα τα arrays) δεν έχουν value (δηλαδή
*p). Τι σημαίνει value ενός array (δεν έχει νόημα δηλαδή). Η απλούστατη λύση είναι
copy. Αντί να κάνεις lnode->val = line θα πρέπει κάθε φορά να δεσμεύεις δηναμικά ένα άλλο κομμάτι heap space στο οποίο θα αποθηκεύεις τα περιεχόμενα του buffer. Εάν ήταν Java τι θα έκανες; Φαντάζομαι κάτι σε
lnode.setVal(new String("...")), έ αυτό το
new (που κάνει dynamic allocation για ένα new string object) θα πρέπει να το κάνεις είτε με
malloc() (δηλαδή lnode->val = (char *)malloc(strlen(line)+1); strncpy(lnode->val, line, strlen(line));, είτε με
strdup() (δηλαδή lnode->val = strdup(line);) To δεύτερο κάνει ότι το πρώτο απο μόνο του.
Theofaman wrote:
Το line πως γινεται clear? Δεν βρηκα κατι στο google.
bzero(line, sizeof(line));
memset(line, 0, sizeof(line));
Στο τέλος ότι έχεις κάνει
malloc()/calloc() φρόντισε να το κάνεις
free(), ομοίως και ότι έχει προκύψει απο
strdup() -- αλλιώς έχεις σοβαρά memory leaks/λάθη.