De volgende code is een deel van een ontzettend veel groter geheel, daarom worden er soms vage manieren gebruikt om waarden te onthouden.
Ik zit er mee dat ik geheugen gealloceerd heb, binnen de range van het gealloceerde geheugen blijf, maar toch foute waarden krijg.
Naja, de code hieronder is dus okeey... ik heb dus nix om te 'showen' maar ik werk wel met het opslaan volgens deze constructie. Het probleem zit m er in dat zo lang ik mijn gegevens binnen mijn programma heb er nix mis is, maar als ik ze opsla en laad volgens deze functie (laden staat er neit bij) dan blijkt dat hij de laaste (twee) lussen wel uitgevoerd heeft maar niet de gegevens weggeschreven omdat ze allemaal -832blablabla opleverden....
Ik zit er mee dat ik geheugen gealloceerd heb, binnen de range van het gealloceerde geheugen blijf, maar toch foute waarden krijg.
Naja, de code hieronder is dus okeey... ik heb dus nix om te 'showen' maar ik werk wel met het opslaan volgens deze constructie. Het probleem zit m er in dat zo lang ik mijn gegevens binnen mijn programma heb er nix mis is, maar als ik ze opsla en laad volgens deze functie (laden staat er neit bij) dan blijkt dat hij de laaste (twee) lussen wel uitgevoerd heeft maar niet de gegevens weggeschreven omdat ze allemaal -832blablabla opleverden....
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
| #define MAX_ONTHOUD_DATA 5 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char directorie[80]; char bestandsnaam[12]; FILE *connectie; } onthouddatabases; typedef struct { bool ingebruik; long plaatsinbestand; bool gewijzigt; long nummer; long klantnummer; char klantnaam[50]; char factuurdatum[30]; char betaalwijze[30]; char termijn[30]; int inlijst; long *pleknummer; long *plekaantal; float *plekkorting; } onthoudorders; onthouddatabases data_connectie[3]; onthoudorders order[MAX_ONTHOUD_DATA]; int main() { int xtrapos; long tijdelijkelong; float tijdelijkefloat; int record = 1; //maak een record klaar door er gegevens in te stoppen order[record].ingebruik = true; order[record].gewijzigt = true; order[record].plaatsinbestand = 0; order[record].nummer = 1; strcpy(order[record].klantnaam, "Erik test"); order[record].klantnummer = 3; strcpy(order[record].factuurdatum, "datum"); strcpy(order[record].betaalwijze, "geen Bwijze"); strcpy(order[record].termijn, "geen T"); order[record].inlijst = 3; //alloceer geheugen voor de spullen in de lijst order[record].pleknummer = (long*) malloc(order[record].inlijst * sizeof(long)); order[record].plekaantal = (long*) malloc(order[record].inlijst * sizeof(long)); order[record].plekkorting = (float*) malloc(order[record].inlijst * sizeof(float)); order[record].pleknummer[0] = 1; order[record].plekaantal[0] = 1; order[record].plekkorting[0] = 0; order[record].pleknummer[1] = 3; order[record].plekaantal[1] = 1; order[record].plekkorting[1] = 0.5; order[record].pleknummer[2] = 2; order[record].plekaantal[2] = 4; order[record].plekkorting[2] = 30.9; //open database data_connectie[0].connectie = fopen("data.db", "wb"); //schrijf gegevens weg fwrite(&order[record].nummer, sizeof(long), 1, data_connectie[0].connectie); fwrite(&order[record].klantnaam, 1, 50, data_connectie[0].connectie); fwrite(&order[record].klantnummer, sizeof(long), 1, data_connectie[0].connectie); fwrite(&order[record].factuurdatum, 1, 30, data_connectie[0].connectie); fwrite(&order[record].betaalwijze, 1, 30, data_connectie[0].connectie); fwrite(&order[record].termijn, 1, 30, data_connectie[0].connectie); fwrite(&order[record].inlijst, sizeof(int), 1, data_connectie[0].connectie); //binnen deze if gaat het mis met het opvragen van de gealloceerde geheugenruimtes if(order[record].inlijst > 0) { for(xtrapos = 0; xtrapos < order[record].inlijst; xtrapos++) { tijdelijkelong = order[record].pleknummer[xtrapos]; fwrite(&tijdelijkelong, sizeof(long), 1, data_connectie[0].connectie); } for(xtrapos = 0; xtrapos < order[record].inlijst; xtrapos++) { tijdelijkelong = order[record].plekaantal[xtrapos]; fwrite(&tijdelijkelong, sizeof(long), 1, data_connectie[0].connectie); } for(xtrapos = 0; xtrapos < order[record].inlijst; xtrapos++) { tijdelijkefloat = order[record].plekkorting[xtrapos]; fwrite(&tijdelijkefloat, sizeof(float), 1, data_connectie[0].connectie); } } fclose(data_connectie[0].connectie); } |
[ Voor 17% gewijzigd door Xorgye op 27-03-2006 14:45 . Reden: heerlijke stupido typo ]