Ik zit al twee dagen tegen het volgende probleem op te hikken, maar ik hoopte dat jullie konden helpen.
Ik probeer een programma te maken wat MP3s checkt, in C, op Linux, en een van de functies van dat programma is checksums, oftewel CRCs controleren. Nu heb ik de volgende code:
en verder:
Nou lijkt alles goed te gaan, de data wordt in pnt gelezen enzo, maar als ik in de debugger een breakpoint ze op crc16, dan geeft hij het volgende:
En ik begrijp niet helemaal hoe dat kan, want pnt hoort nooit 0x1a1 te bevatten. 0x1a1 is toevalligerwijs fi->length, zou het daar iets mee te maken hebben? Als ik regel 32 in commentaar zet komt pnt wel goed door naar crc16, maar dan is de code weer zo onnuttig. Kan iemand me helpen?
Ik probeer een programma te maken wat MP3s checkt, in C, op Linux, en een van de functies van dat programma is checksums, oftewel CRCs controleren. Nu heb ik de volgende code:
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
| int checkcrc16(file, fi) file_info * file; frame_info * fi; { char * pnt; int res; int len; int new_crc16; /* get some memory to put the data in to be crcked */ pnt=(char *)malloc(fi->length); if (pnt==NULL) { fileerror(" malloc failed"); return FALSE; } memset(pnt, 0, fi->length); /* read byte 2 and 3 from the header */ fseek(file->fp, (fi->offset)+2, SEEK_SET); res=fread(pnt, 2, 1, file->fp); if (!res) { free(pnt); return FALSE; } /* read the rest of the frame */ fseek(file->fp, (fi->offset)+6, SEEK_SET); len=(fi->length)-6; // minus header and crc res=fread(pnt+2, len, 1, file->fp); if (!res) { free(pnt); return FALSE; } new_crc16=crc16(pnt, len+2); free(pnt); printf("Computed crc16: %d\n", new_crc16); if (new_crc16==fi->crc16) { return TRUE; } else { return FALSE; } } |
en verder:
C:
1
2
3
4
5
6
7
| int crc16(data, length) char * data; int length; { bladiebladiebla } |
Nou lijkt alles goed te gaan, de data wordt in pnt gelezen enzo, maar als ik in de debugger een breakpoint ze op crc16, dan geeft hij het volgende:
code:
1
| Breakpoint 3, crc16 (data=0x1a1 <Address 0x1a1 out of bounds>, length=413) |
En ik begrijp niet helemaal hoe dat kan, want pnt hoort nooit 0x1a1 te bevatten. 0x1a1 is toevalligerwijs fi->length, zou het daar iets mee te maken hebben? Als ik regel 32 in commentaar zet komt pnt wel goed door naar crc16, maar dan is de code weer zo onnuttig. Kan iemand me helpen?