Ik ben bezig met een appje om een textbestandje uit te lezen en de afzonderlijke woorden in een linked list te plaatsen (en daarna weer verder te verwerken, maar is niet voor mijn vraag van belang). In dit geval bevat het txt bestandje alleen de woorden "appel peer boom". In het loopje print ik de pointer van de variabele "newword" voor (noob)debug doeleinden. Als ik de linked list print krijg ik de volgende output:
Het lijkt erop dat hij de ruimte die met malloc voor "appel" gereserveerd wordt blijft gebruiken voor de nodes en op 1 of andere manier het volgende woord eroverheen wilt schrijven.
Blijkbaar zie ik aardig wat over het hoofd, heeft er iemand toevallig tips hoe ik dit op zou kunnen lossen?
Ik heb main.c even buiten beschouwing gelaten.
code:
1
2
3
4
5
6
| processing file...003E2508 003E2548 The list is : boorl --> boorl --> NULL |
Het lijkt erop dat hij de ruimte die met malloc voor "appel" gereserveerd wordt blijft gebruiken voor de nodes en op 1 of andere manier het volgende woord eroverheen wilt schrijven.
Blijkbaar zie ik aardig wat over het hoofd, heeft er iemand toevallig tips hoe ik dit op zou kunnen lossen?
Ik heb main.c even buiten beschouwing gelaten.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
| /* * File: Linkedlist.c * Title: Linkedlist * Description: contains linked list code * Author: Stephan Bakker * * $Id:$ * * $Log:$ * * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "prototypes.h" void insert(NODESPTR *, char *); void printList(NODESPTR); int isChar(char); void linkedList(); struct Nodes { char *data; struct Nodes *nextPtr; /* pointer to next structure */ }; typedef struct Nodes NODES; typedef NODES *NODESPTR; void linkedList(){ d.count = 0; NODESPTR startPtr = NULL; d.c = fgetc(d.fileDocument); printf("processing file..."); while ((d.d = fgetc(d.fileDocument)) != EOF) { /*If two lines in a row*/ if ((d.c == '\n') && (d.d == '\n')) { } /* if not two non-characters in a row */ else if ((isChar(d.c) == 0) && (isChar(d.d) == 0)) { d.c = d.d; } /* if c and d are both characters */ else if ((isChar(d.c) == 1) && (isChar(d.d) == 1)) { d.word[d.count] = d.c; d.c = d.d; d.count++; } /* if c is character and d is space, return, tab, or new line */ else if ((isChar(d.c) == 1) && (isChar(d.d) == 0)) { d.word[d.count] = d.c; char *newword = malloc(sizeof(d.word)); printf("%p\n\n\n", newword); newword = d.word; insert(&startPtr, newword); d.c = d.d; d.count = 0; } /* if d is start of new word */ else if ((isChar(d.d) == 1) && (isChar(d.c) == 0)) { d.c = d.d; } } fclose(d.fileDocument); printList(startPtr); } /* insert into linked list */ void insert(NODESPTR *sPtr, char *value) { NODESPTR newPtr, previousPtr, currentPtr; newPtr = malloc(sizeof(NODES)); if (newPtr != NULL) { /* is space available */ newPtr->data = malloc(sizeof(value)); newPtr->data = value; newPtr->nextPtr = NULL; previousPtr = NULL; currentPtr = *sPtr; while (currentPtr != NULL && value > currentPtr->data) { previousPtr = currentPtr; currentPtr = currentPtr->nextPtr; /* walk to next node */ } if (previousPtr == NULL) { newPtr->nextPtr = *sPtr; *sPtr = newPtr; } else { previousPtr->nextPtr = newPtr; newPtr->nextPtr = currentPtr; } } else printf("%s not inserted. No memory available.\n", value); } /* Print the list */ void printList(NODESPTR currentPtr) { if (currentPtr == NULL) printf("List is empty.\n\n"); else { printf("The list is:\n"); while (currentPtr != NULL) { printf("%s --> ", currentPtr->data); currentPtr = currentPtr->nextPtr; } printf("NULL\n\n"); } } |