while Schleife in C

#796388
Lesenswert?

Hallo ihr,

ich habe einen Datenfluss gelsen und eine neue Nachricht fängt immer mit 
0x002e an. Ich benutze eine 32bit Zeiger in meinem Programm.

Also damit ich den Anfang finden kann, benutze ich noch eine 
2.Zeiger(16bit)
1
int32 *zeiger;
2
...
3
int32 y;
4
int16 *x;
5
x= (int16*)&y;
6
while((x[0] != 0x002e) && (x[1] != 0x002e))
7
{
8
   zeiger ++;
9
  //
10
   y = *zeiger;
11
   //obwohl mein programm immer noch laeuft
12
  //aber an dieser Stelle habe ich nur manchmal eine warnung bekommen
13
}
es wäre sehr nett wenn ihr meinen Fehler zeigen könnt
Persönliche Seite #796440
Lesenswert?

> Segmentation fault
also
>> Speicherzugriffsfehler zur Laufzeit

Das ist keine Warnung, das ist der GAU.

Kann ich so nicht entscheiden, was du da machen kannst.

Was hast du denn an Informationen über den Datenstrom bzw. den Puffer 
auf dem oder in dem der zeiger arbeitet?

Weisst du was über die aktuelle oder maximale Grösse des Puffers?

Hast du ausser dem zeiger vielleicht auch die AnZahl der eingelesenen 
Elemente?

Oder gibt es eine absolute Endekennung im Datenstrom ähnlich zu dem 
0x002e?
#796443
Lesenswert?

Buns Tsuko wrote:
> Rolf Magnus wrote:
>>> //aber an dieser Stelle habe ich nur manchmal eine warnung bekommen
>>
>> Wie "nur manchmal? Und WELCHE Warnung?
>
> Segmentation fault

Das ist der Scherz des Jahrhunderts:
'Segmentation fault' als Warnung zu bezeichnen.

'Segmentation fault' oder was dem gleichkommt 'Access violation'
ist DER Supergau schlechthin. Es bedeutet, daß die Kacke
mächtig am dampfen ist.

> > Du hast keine Erkennung drin, ob du am Ende deines Datenstroms
> > angekommen bist.
> >
> Wie kann ich diese Erkennung festlegen?

Das kommt auf deinen Datenstrom an, bzw. den Teil den
du bis jetzt gelesen hast. Irgend etwas in diesem
Datenstrom, bzw. deinem Buffer, wird dir ja wohl sagen
wie gross der jetzt ist.
#796497
Lesenswert?

Buns Tsuko wrote:
> wie kann ich denn wissen, auf welche Stelle in Array meine Zeiger gerade
> zeigt?

Indem du die Differenz zum Start des Arrays berechnest.

Meist macht man das aber anders rum:
Man arbeitet mit 2 Pointern.
Einer am Anfang des Arrays (das ist der der dann in der
Schleife ständig erhöht wird)
Einer am Ende des Arrays

Ist der laufende Pointer gleich dem Ende-Pointer, dann
hat man klarerweise das Array durch.

Anderer Ansatz:
Wir wissen ja, dass das Array zb. 10 Einträge lang ist.
In der Schleife braucht man daher nur mitzählen, wie oft
man erhöht hat. Ist die 10 erreicht, dann ist man mit dem
Array durch.

Möglichkeiten gibt es viele. Must halt ein bischen kreativ
sein.

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