Ich habe Probleme zu identifizieren, warum es einen Segmentierungsfehler in meinem Programm gibt. Ich habe solche Dinge schon einmal erfolgreich gemacht, aber diese spezielle Funktion verursacht einen Segmentierungsfehler.Segmentierungsfehler - sprintf
Mein Code ist hier:
void logErrorStatus(char* message)
{
char* errorMessage = "test";
sprintf(errorMessage, "ERROR (%s, %d) >> %s", __FILE__, __LINE__, message);
logMessage(errorMessage);
}
void logMessage(char* message)
{
FILE* file = NULL;
char buffer[SIZE];
struct tm *sTm;
time_t now = time(NULL);
sTm = localtime(&now);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", sTm);
file = fopen(LOGFILE, "a");
if(file == NULL)
{
printf("Error opening log file.\n");
}
else
{
fprintf(file, "%s : %s\n", buffer, message);
}
if(fclose(file) != 0)
{
printf("Error closing log file.\n");
}
}
Die seg Fehler auf der sprintf() Linie geschieht in der logErrorStatus() Funktion.
Jede Hilfe wäre großartig! Vielen Dank!
prüfen wenn 'malloc'' NULL' zurückgibt oder 'snprintf' verwendet. –
Weitere Überlegungen: Stimmen Sie überein, "versucht, ein konstantes String-Literal zu überschreiben", aber nicht für die Zuweisung von Speicher. Es ist nicht "malloc()" ist böse, es ist, dass eine _error_ Nachricht protokolliert werden soll, Code sollte Ressourcen vermeiden, die typische Fehlerquellen sind. Beispiel, der Fehler ist "Out-of-memory" und diese Antwort ist der Aufruf von 'malloc()' gibt 'NULL' zurück. In diesem Fall besser "logMessage (message);" als nichts zu tun. IMO, favor "" ERROR (% .64s,% d) >>% .80s "," in einen weit genug festen Pufferansatz, da ich nicht übermäßig lange Fehlermeldungen traue. OTOH, diese Antwort erfüllt die Bedenken von OP – chux
@chux - Ich stimme zu. Aber die Frage könnte in Zukunft auch für jemanden nützlich sein, der keinen Fehlerlogger schreibt, und so wurden beide Optionen präsentiert. – owacoder