Char Array Werte falsch



  • Hallo

    ich weiss an dem Problem leider nicht mehr weiter.

    Ich habe einen Thread der periodisch Daten schickt. Wann der Daten schickt wird über einen counter Parameter bestimmt.
    Wenn Daten geschickt werden, wird eine Callback Funktion aufgerufen und die Daten (string bzw char-array) werden dort ausgegeben.

    Interessant und für mich momentan irgendwie nicht begreiflich ist, dass dies bei dem Wert 1 und 2 funktioniert aber beim 3. nicht mehr.

    Codeauszug der Threadfunktion

    char data[200];
    int loop = 1;
    
    while(1==1)
    {
      strcpy(data, "");
      data[0] = '\0';
      sprintf(data, "%d", loop);
      StreamData(data);     // Callback Funktion aufrufen
      Sleep(500);			
    
      loop= loop+1;		// Schleifenzähler
      if (loop >= 10)
        loop=1;
    }
    

    Die Callback Funktion ist folgende:

    DWORD *CB (char *value)
    {
     //printf("%s\n", value);
     return 0;
    }
    

    Was passiert:
    Starten
    1 wird ausgegeben
    2 wird ausgegeben
    3 wird im Thread ausgegeben aber in der Callback kommen %&§)" oder ähnliches
    4 wie 3
    dann gehts wieder bei 1 los

    Wenn ich allerdings den Callback-Aufruf weglasse dann zählt er schön hoch.
    Der Fehler sollte dann irgendwo in dem Callback Aufruf liegen - nur hab ich keine Ahnung wo. Es sieht so aus als würde der Speicher überschrieben, zumal der "loop" (Counter) ebenfalls irgendwie wieder auf 1 zurückfällt.

    Hat hier vielleicht jemand einen Rat ?

    Gruss
    Bernd



  • Sicher - das soll er ja auch tun. Es soll sich ja nur der Wert von "data" verändern.
    Mit dem strcpy und dem data[0] = '\0' soll ja wieder alles was im char array steht gelöscht werden.

    Wenn ich die Callbackfunktion (StreamData(data)) weglasse und debugge, dann zählt er wie gewollt hoch - auch in data steht immer der richtige Wert.

    Bei der Callbackfunktion passiert beim Wert 3 folgendes.
    Der Thread schreibt die 3 in data aber im Thread kommt nur "%/&/$$" oä an.



  • Auszug aus dem Debugger

    bei loop = 2:
    data 0x010ff6e0 "2" char[200]
    value 0x010ff6e0 "2" char*

    bei loop = 3:
    data 0x010ff6e0 "3" char[200]
    value 0x010ff6e0 "ö$/ " char*



  • Vielleicht hilft es ja, die Standarddatentypen wie std::string zu nutzen. Und while(1==1) ist ja auch mehr als furchtbar.



  • das while ist ja nur zum testen 😉



  • Ja, aber while(true) oder for( ; ; ) ist einfach ... naja ...



  • knivil schrieb:

    Ja, aber while(true) oder for( ; ; ) ist einfach ... naja ...

    Sei doch nicht s pingelig! Ich mach das immer so:

    while(!(0!=(0==1))) { /*...*/ }
    

    😃 😉



  • hübsch ist auch

    #define ever (;;)
    


  • Das ist ja süß... 😉

    PS:
    ich mach immer den hier:

    while ( true )
    {
    ...
    }
    

    und wenn ich Bock hab, spring ich dann wieder raus 😉



  • sind ja alles nette Posts 🙂
    Aber das Problem besteht leider immer noch

    Sobald diese Callback Funktion nicht aufgerufen wird funktioniert es.



  • Ich habs probiert - kann jedoch nichts feststellen.

    Hab diese Funktion jetzt mal in einem Projekt im einer per ".h" Datei eingebundenen DLL probiert. Hier funktioniert es.

    Weiter weiss ich im Moment auch nicht - kann es evtl mit den dllimports zusammenhängen.

    Hab das ganze so eingebunden - bzw über diese Funktion

    extern "C" __declspec(dllexport)DWORD __stdcall Connect(char *parameter, fpCallBackSTREAM pFunc);
    

Anmelden zum Antworten