Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Speicherzugriffsfehler mit `fprintf`..?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.11.2019, 12:34 Uhr
xdev



Hallo zusammen

Bei mir crasht folgende Funktion:


C++:
void CMasterManager::reportAsOnLife()
{

    bool bIntime = inIntervalSpan("reportasonlife");
    time_t timev;
    time(&timev);
    FILE *flagfile;
    std::stringstream fname;
    fname <<RUNNING_DIR<<"/DS/devstate";
    flagfile=fopen(fname.str().c_str(),"w");

    std::cout << "flagfile: " << flagfile << std::endl;
    std::cout << "fname: " << fname.str().c_str() << std::endl;
    std::cout << "timev: " << timev << std::endl;

    fprintf(flagfile, "%ld", (long) timev);

    exit(0);

    if(flagfile)fclose(flagfile);
}




..wenn ich exit(0); oberhalb von fprint macht, dann gibt's keinen Speicherzugriffsfehler mehr.

Ausgabe:


Code:
flagfile: 0
fname: /opt/x/DS/devstate
timev: 1573211913
Speicherzugriffsfehler




-> Die Datei /opt/x/DS/devstate existiert, daran liegt's also nicht.

P.S.: Bin totaler Anfänger, und der Urheber des Codes ist irgendwie selbst nicht ganz in der Lange mir richtig zu helfen. Habe jetzt alles möglich versucht, aber nix hilft...:-(

Vielen Dank für die Feedbacks.


Grüsse,
Jan

Dieser Post wurde am 10.11.2019 um 12:46 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.11.2019, 13:11 Uhr
xdev



Hallo zusammen

Problem gelöst! Es waren 2 Probleme dahinter:

1. Habe das Programm nicht also root und auch nicht mit sudo/su ausgeführt
2. Nach dem Ausführen als root habe ich gemerkt dass natürlich zuerst die Verzeichnisstruktur /opt/x/DS existieren muss.


Das Problem war somit, dass das Programm nicht richtig geprüft hat was es kann und was nicht, und ob die Verzeichnisstruktur existiert oder nicht. Das hätte man besser behandeln, und dazu eine vernünftige Fehlermeldung ausgeben können.

Habe schon gedacht die Meldung "Speicherzugriffsfehler" hänge mit irgendwelchen Memory-Allocation-Sachen zusammen und dass ich die nächsten x Tage dran sein werde das Problem zu fixen! ;-)


Grüsse, Jan

Dieser Post wurde am 08.11.2019 um 13:11 Uhr von xdev editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.11.2019, 12:48 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
naja du bekommst den Speicherzugriffsfehler, weil du nicht prüfst, ob du die Datei öffnen kannst. Wenn du nicht schreiben kannst (z.B. wegen fehlender rechte oder fehlendem verzeichnis) bekommst du bei fopen "NULL" zurück. Das muss man abfangen, sonst crasht dir dein programm bei dem fprintf.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.11.2019, 11:10 Uhr
xdev



Vielen Dank!! :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: