Hallo iedereen,
Ik snap niet waarom ik onderstaande error krijg bij het uitvoeren van het programma:
*** glibc detected *** ./SMAspot: corrupted double-linked list: 0x00378998 ***
Afgebroken
Ik heb 2 gelijkaardige functies, de ene voor het ophalen van data, en de andere voor het verzenden van data en zijn in wezen identiek buiten een andere struct.
Het verzenden van data lukt niet (altijd?).
Wanneer ik een realloc doe per item, geraak ik 72 items ver met een segmentatiefout.
Maak ik men stuct groter, gebeurt de fout sneller, ik vermoed dat het fout gaat indien de pointer van adres verandert.
Heeft iemand een idee waarom?
Enkele belangrijke delen uit de code:
"globale" variabelen:
Onderstaande functie wordt in een lus aangesproken:
Ik krijg volgende output van m'n printf's:
Bedankt wie kan helpen, want ik ben ver ten einde raad.
Ik snap niet waarom ik onderstaande error krijg bij het uitvoeren van het programma:
*** glibc detected *** ./SMAspot: corrupted double-linked list: 0x00378998 ***
Afgebroken
Ik heb 2 gelijkaardige functies, de ene voor het ophalen van data, en de andere voor het verzenden van data en zijn in wezen identiek buiten een andere struct.
Het verzenden van data lukt niet (altijd?).
Wanneer ik een realloc doe per item, geraak ik 72 items ver met een segmentatiefout.
Maak ik men stuct groter, gebeurt de fout sneller, ik vermoed dat het fout gaat indien de pointer van adres verandert.
Heeft iemand een idee waarom?
Enkele belangrijke delen uit de code:
"globale" variabelen:
C:
1
2
3
| PVOutPut *statuses = NULL; unsigned int num_statuses = 0; unsigned int alloc_statuses = 0; |
Onderstaande functie wordt in een lus aangesproken:
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
| int AddToArray_put(PVOutPut item, unsigned int alloc_new) { if(VERBOSE_HIGHEST) puts("AddToArray_put()"); printf("item.datetime: %s\n", strftime_t("%d/%m/%Y %H:%M:%S", item.datetime)); printf("item.engen: %llu\n", item.engen); printf("item.powgen: %i\n", item.powgen); printf("item.voltage: %lu\n", item.voltage); printf("alloc_new: %i\n", alloc_new); PVOutPut *tmpptr = NULL; printf("*tmpptr: %p\n", tmpptr); printf("num_statuses: %i\n", num_statuses); printf("alloc_statuses: %i\n", alloc_statuses); //If array full and no new allocation requested, set request to 1 if((alloc_new == 0) and (num_statuses == alloc_statuses)) alloc_new = 1; printf("alloc_new: %i\n", alloc_new); alloc_statuses = alloc_statuses + alloc_new; printf("alloc_statuses: %i\n", alloc_statuses); printf("statuses: %p\n", statuses); printf("sizeof(PVOutPut): %i\n", sizeof(PVOutPut)); //statuses = (PVOutPut*)realloc(statuses, alloc_statuses * sizeof(PVOutPut)); tmpptr = (PVOutPut*)realloc(statuses, alloc_statuses * sizeof(PVOutPut)); printf("*tmpptr: %p\n", tmpptr); if(tmpptr != NULL){ statuses = tmpptr; printf("statuses: %p\n", tmpptr); statuses[num_statuses] = item; num_statuses++; printf("num_statuses: %i\n", num_s corrupted double-linkedtatuses); //alloc_new = 0; } else{ if(VERBOSE_LOW) puts("realloc() failed!"); return -1; } //statuses[num_statuses] = item; //num_statuses++; //if(!statuses){ //if(VERBOSE_LOW) puts("realloc() failed!"); //return -1; //} //statuses[num_statuses] = item; //num_statuses++; //alloc_new = 0; if(DEBUG_VERYHIGH){ printf("Number of statuses: %i using %i/%i bytes\n", num_statuses, num_statuses * sizeof(PVOutPut), alloc_statuses * sizeof(PVOutPut)); //printf("statuses[%i].time: %s\t", num_statuses - 1, strftime_t(cfg->DateTimeFormat, statuses[num_records - 1].datetime)); printf("statuses[%i].time: %s\t", num_statuses - 1, strftime_t("%d/%m/%Y %H:%M:%S", statuses[num_statuses - 1].datetime)); printf("statuses[%i].engen: %llu\t", num_statuses - 1, statuses[num_statuses - 1].engen); printf("statuses[%i].powgen: %i\n", num_statuses - 1, statuses[num_statuses - 1].powgen); //printf("statuses[%i].voltage: %llu\t", num_statuses - 1, statuses[num_records - 1].voltage); } return num_statuses; } |
Ik krijg volgende output van m'n printf's:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| AddToArray_put() item.datetime: 17/03/2013 07:30:00 item.engen: 7261403 item.powgen: 0 item.voltage: 0 alloc_new: 37 *tmpptr: (nil) num_statuses: 0 alloc_statuses: 0 alloc_new: 37 alloc_statuses: 37 statuses: (nil) sizeof(PVOutPut): 20 *** glibc detected *** ./SMAspot: corrupted double-linked list: 0x00378998 *** Afgebroken |
Bedankt wie kan helpen, want ik ben ver ten einde raad.