Substituierter Code schmiert ab

Gast #5458778
Lesenswert?

Hallo,

ich habe ein merkwürdiges Absturzverhalten:

Gegeben ist eine Funktion in der der folgende Code enthalten ist:
1
Funktion1()
2
{
3
...diverser Code...
4

5
uint8_t array[6] = {0};
6
sscanf(Struktur.Eintrag_eins, "%X:%X:%X:%X:%X:%X", (uint *) &array[0], (uint *) &array[1], (uint *) &array[2], (uint *) &array[3], (uint *) &array[4], (uint *) &array[5]);
7

8
for (uint8_t i = 0; i < 6; i++)
9
{
10
 Struktur.Eintrag_zwei[i] = array[i];
11
}
12
}


Nun kommt der detaillierte Code an weiteren Stellen auch vor und daher 
habe ich ihn in eine Funktion gepackt, d.h.
1
void Funktion2(void)
2
{
3
uint8_t array[6] = {0};
4
sscanf(Struktur.Eintrag_eins, "%X:%X:%X:%X:%X:%X", (uint *) &array[0], (uint *) &array[1], (uint *) &array[2], (uint *) &array[3], (uint *) &array[4], (uint *) &array[5]);
5

6
for (uint8_t i = 0; i < 6; i++)
7
{
8
 Struktur.Eintrag_zwei[i] = array[i];
9
}
10

11
}


und folgend:
1
Funktion1()
2
{
3
...diverser Code...
4
Funktion2();
5
}

Ich möchte also eigentlich nur substituieren, weil das an mehreren 
Stellen vorkommt, doch nun führt das plötzlich zu Abstürzen.

Bei der Struktur handelt es sich um eine globale Variable.


Jemand eine Idee, warum das so nicht funktioniert?
Gast #5458788
Lesenswert?

Sieht so aus, als ob scanf mehr als ein Byte pro Wert in den Speicher 
schreibt. Der Fehler ist also schon im alten Code vorhanden, aber da hat 
es nichts sonderlich Wichtiges zerrissen.

Also muss die Definition
1
uint8_t array[6] = {0};
 angepasst werden.
Am Besten so, dass Typecasts wie Dein "(uint *)" nicht mehr nötig sind.

Bzw. mach die Typecasts weg und lass Dir die Compilerwarnungen auf der 
Zunge zergehen ;-)
Gast #5458789
Lesenswert?

Wenn man unsigned ints, die mindestens zwei Byte breit ist, in ein Array 
aus uint8_t liest, kann es schonmal zu Problemen kommen. Daß es das 
vorher nicht tat, kann Zufall gewesen sein, weil dann halt beim Zugriff 
auf das letzte Array-Element irgendwas Unwesentliches überschrieben 
wurde.

Ändere den Datentyp bei dem Array mal auf unsigned int.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren