Hallo iedereen,
Als (dikke) amateur durf ik wel eens te programmeren in mijn vrije tijd.
Nu heb ik het volgend probleem:
Ik ontvang data, maar heb er geen idee van hoe veel records dit zullen zijn. Om dit wat gestructureerd te houden, heb ik een struct van de ontvangen data gemaakt, en alloceer ik deze dynamisch.
So far so good, alloceren; schrijven en lezen gaat zoals het hoort... de array leegmaken wat minder.
Wat doe ik hier verkeerd, vast iets simpel?
Ik heb me gebaseerd op volgende informatie (werkt trouwens perfect):
http://fydo.net/gamedev/dynamic-arrays
Ook ben ik aan het testen geslagen met vectoren zoals je ziet, nu ben ik wel ontzettend hard c en c++ aan het mengen, wat toch niet meer zo netjes is.
Edit: Misschien is het beter een fixed size array te voorzien die al m'n data kan bevatten, vermits ik het maximum wel kan berekenen.
Bedankt alvast!
Als (dikke) amateur durf ik wel eens te programmeren in mijn vrije tijd.
Nu heb ik het volgend probleem:
Ik ontvang data, maar heb er geen idee van hoe veel records dit zullen zijn. Om dit wat gestructureerd te houden, heb ik een struct van de ontvangen data gemaakt, en alloceer ik deze dynamisch.
So far so good, alloceren; schrijven en lezen gaat zoals het hoort... de array leegmaken wat minder.
Wat doe ik hier verkeerd, vast iets simpel?
Ik heb me gebaseerd op volgende informatie (werkt trouwens perfect):
http://fydo.net/gamedev/dynamic-arrays
Ook ben ik aan het testen geslagen met vectoren zoals je ziet, nu ben ik wel ontzettend hard c en c++ aan het mengen, wat toch niet meer zo netjes is.
Edit: Misschien is het beter een fixed size array te voorzien die al m'n data kan bevatten, vermits ik het maximum wel kan berekenen.
Bedankt alvast!
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
| #include <time.h> #include <stdlib.h> #include <stdio.h> #include <vector> #include <iostream> typedef struct { time_t datetime; float totalkWh; float watt; }PVOutGet; void ClearArray_get(); int AddToArray_get(PVOutGet item); PVOutGet *records = NULL; int num_records = 0; int main() { PVOutGet buffGet = {0}; std::vector <PVOutGet> vecrec; for(int k=0; k < 1000; k++){ //Some "random" data is inserted buffGet.datetime = k; buffGet.totalkWh = (float) k; buffGet.watt = (float) k; AddToArray_get(buffGet); vecrec.push_back(buffGet); } for (size_t i = 0; i < vecrec.size(); i++){ printf("vecrec[%i]: %lu\n",i , vecrec[i].datetime); } for (int j = 0; j < num_records; j++){ printf("records[%i]: %lu\n",j , records[j].datetime); } ClearArray_get(); return 0; } int AddToArray_get(PVOutGet item) { puts("AddToArray_get()"); void *_tmp = realloc(records, (num_records + 1) * sizeof(PVOutGet)); if (!_tmp) { puts("realloc() failed!"); return -1; } records = (PVOutGet*)_tmp; records[num_records] = item; num_records++; return num_records; } void ClearArray_get() { puts("ClearArray_get()"); //Deallocate for (int i = 0; i <= num_records - 1; i++) { printf("free(records[%i])\n", i); //Wrong here? free(&records[i]); } free(records); num_records = 0; } |