Das hier
1 | for(i=5; i<=length;i++)
|
ist auch dubios.
In einem Vektor der Länge 5, ist der größte sinnvolle Index 4.
zähl nach: sind genau 5 Stück.
Wenn du daher einen String mit der Länge length hast (vorausgesetzt die
Längenangabe ist korrekt), dann ist der größte Index length-1, oder eben
1 | for( i = 5; i < length; i++ )
|
so wie das eben bei Arrays deren Länge man kennt der Normalfall in einer
for-Schleife ist: 'kleiner' und nicht 'kleiner gleich'.
Ausgeglichen wird der Fehler dadurch, dass du in der aufrufenden
Funktion die Länge um 1 zu niedrig zählst. Denn hier
1 | frame_send[SF_length]= CRC_Get(frame_send,SF_length);
|
wird der Frame um 1 länger, was du allerdings nicht in SF_length
berücksichtigst.
Jetzt könnte man natürlich sagen: was solls. Beim Aufrufer ist die Länge
um 1 zu gering, in der Funktion gehts dafür um 1 zu weit - kommt doch am
Ende wieder alles richtig raus.
Ist trotzdem keine gute Idee. Denn irgendwann rufst du die Funktion von
einer anderen Stelle aus auf, und dann übergibst du die tatsächlich
richtige Länge und dann baut die Funktion grossartigen Mist.
Mach die Dinge gleich richtig, so dass jede Funktion genau das tut was
sie zu tun hat und keine Querverbindungen dergestalt bestehen, dass die
eine Funktion fehlerhaft ist und quasi als Ausgleich eine andere
Funktion den gegenteiligen Fehler macht, so dass sich die Fehler
gegenseitig aufheben.