Membervariable verliert Wert?



  • Hallo,

    ich habe ein Problem mit einer Membervariable, die die in einer Memberfunktion nicht den Wert hat, den sie vorher in einer anderen zugewiesen bekommen hat.

    Die Funktion OnTimer wird mach m_timer.start() automatisch regelmäßig aufgerufen. Dort möchte ich die den in serverFrame::Start() zugewiesenen Wert der Variable startingtime benutzen.

    Ich habe folgenden Code in server.h (Ausschnitt):

    class serverFrame
    {
    	public:
    	serverFrame();
    	void OnTimer( wxTimerEvent& event );
    
    	private:
    	bool Start(int interval_msec);
    
    	char * TC_text;
    	char * startingtime;
    
    };
    

    und in server.cpp:

    bool serverFrame::Start(int interval_msec)
    {
    
    // Create Directory named after starting time
      startingtime = sync->getDaytimeText();
      cout <<  "startingtime="<< startingtime << endl; // geht wunderbar
      strcpy(imagepath, "/mnt/daten/bilder/take-");
      strcat(imagepath, startingtime);
      mkdir(imagepath, (__mode_t)1023);
    // Start Timer
      if (m_timer.Start(interval_msec))  cout << "timer started" << endl;
      else cout << "timer could not be started" << endl;
    
      return true;
    }
    
    void serverFrame::OnTimer( wxTimerEvent& event )
    {
    	cout <<  "startingtime="<< startingtime << endl; // leer
    	grabber->grab(frame);
    	strcpy(imagepath, "/mnt/daten/bilder/take-");
    	strcat(imagepath, startingtime); // geht nicht (leer)
    	strcat(imagepath, "/");
    	strcpy(imagename, "Bild_");
    	strcat(imagename, sync->getTCText() );
    	saver->save(frame, imagepath , imagename, BMP, false);
    
    }
    

    Irgendwie sehe ich das Problem nicht. 🙄



  • Vielleicht solltest du für deine Membervariablen:
    char * TC_text;
    char * startingtime;
    auch Speicher allokieren bevor du irgendwas dorthin kopierst. 😉 😃



  • startingtime ist nur ein Pointer auf ein char-Array, das von jemand anderem kontrolliert wird (vermutlich sync) - du solltest die Werte lieber in ein eigenes Array kopieren:

    char* daytime=sync->getDaytimeText();
    startingtime=new char[strlen(daytime+1);
    strcpy(startingtime,daytime);
    

    (und vergiss ein "delete[] startingtime;" im Destruktor nicht)



  • Danke! 🙂


Anmelden zum Antworten