Forum: Compiler & IDEs seltsames Verhalten eines Vektors


von HansDampf (Gast)


Lesenswert?

Hallo,

habe einen Vektor

unsigned char time_buffer[18];

wenn ich ihn mit

while (j<12) time_buffer[j++]=1;

initialisieren will, stehen anschliessend falsche Werte drin (also keine 
1en).

Hingegen

time_buffer[0]=1;
time_buffer[1]=1;
time_buffer[2]=1;
time_buffer[3]=1;
time_buffer[4]=1;
time_buffer[5]=1;
time_buffer[6]=1;
time_buffer[7]=1;
time_buffer[8]=1;
time_buffer[9]=1;
time_buffer[10]=1;
time_buffer[11]=1;

funktioniert einwandfrei.

Weiss jemand, was da los sein kann?

Danke

Hans

von Freizeitbastler (Gast)


Lesenswert?

Ich würde vor der Schleife
1
 j=0;

schreiben. Der Rest sieht i. O. aus.

von HansDampf (Gast)


Lesenswert?

Habe ich schon. j ist deklariert als

unsigned char j=0;

von Helmut L. (helmi1)


Lesenswert?

Du kannst ihn auch einfacher initialisieren.

memset(time_buffer,1,sizeof(time_buffer))

oder

memset(time_buffer,1,12);

Gruss Helmi

von Stefan E. (sternst)


Lesenswert?

Dann poste mal ein komplettes Beispiel und nicht nur ein paar 
Code-Bröckchen. Und tippe es nicht per Hand "aus dem Gedächtnis" ein, 
sondern füge den Code per Cut&Paste ein, oder poste gleich die ganze 
Datei als Anhang.

von HansDampf (Gast)


Lesenswert?

ich habe die Lösung gefunden.

Wenn ich

unsigned char time_buffer[18];

global anlege und nicht in der main, geht alles wie es soll.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

HansDampf wrote:

> ich habe die Lösung gefunden.

Nein, hast du nicht.  Solange du nicht weißt, warum das von dir
beobachtete Verhalten auftritt, doktorst du nur an den Symptomen
herum.

Vermutlich wird bei der lokalen Variablen der Optimizer feststellen,
dass du die initialisierten Werte gar nicht benutzt und das dann
gleich alles sein lassen, aber dann wäre es unlogisch, warum er es
in der Schleife wegoptimiert, bei entrollter Schleife jedoch nicht.

von HansDampf (Gast)


Lesenswert?

>Solange du nicht weißt, warum das von dir
>beobachtete Verhalten auftritt, doktorst
>du nur an den Symptomen herum.

Das stimmt schon. Aber woran kann das liegen? Ich weise in main dem 
Vektor Werte zu, die ich für einen Funktionsaufruf (ausserhalb main 
natürlich)  benutze.

Ich dachte mir schon, dass der Compiler vermutlich was wegoptimiert.

Aber warum macht er das?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Ich weise in main dem Vektor Werte zu, die ich für einen
> Funktionsaufruf (ausserhalb main natürlich)  benutze.

Da wir weder sehen können, wo der "Vektor" deklariert ist, noch, wie 
die Funktion aufgerufen wird, geschweige denn, wie die Funktion auf 
den "Vektor" zugreift, kann ich hier nur Stefan zitieren:

Beitrag "Re: seltsames Verhalten eines Vektors"

Poste KOMPLETTEN Quellcode, keine zusammenhanglosen Schnipsel!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.