Zusätzliche Zeichen am Anfang des Strings hinzugefügt?

8

Ich habe zwei zusätzliche Zeichen am Anfang meiner Zeichenfolge hinzugefügt und ich kann nicht herausfinden, warum. Die Zeichen erscheinen nicht einmal im Code. Ich bin hier ratlos. Das ist mein Code:

%Vor%

Aus irgendeinem Grund erzeugt der Code Folgendes:

%Vor%

Wenn es das produzieren sollte:

%Vor%     
Nickname97 29.02.2016, 04:10
quelle

5 Antworten

5

Sie haben nicht initialisiertes input an vector() übergeben und es verwendet, so dass Sie undefiniertes Verhalten aufgerufen haben.

Versuchen Sie, char *input in char *input = "" zu ändern.

Entferne auch free(chars); , sonst tritt ein doppeltes Problem auf.

    
MikeCAT 29.02.2016, 04:14
quelle
6

Alle Punkte @MikeCat sind korrekt, nur um hinzuzufügen, dass der von calloc zugewiesene Speicher nicht freigegeben ist, was zu einem Speicherverlust führt. Sie können free es wie von @ M.M in einem Kommentar gesagt, aber für das nächste Mal, um Speicherlecks zu vermeiden, können Sie valgrind :

verwenden
  

Nehmen wir Ihr Programm als hash.c . Gehe zur Befehlszeile und kompiliere sie, zB:

%Vor%      

Wenn Ihr Programm erfolgreich kompiliert wird, erscheint eine ausführbare Datei oder out -Datei. Da wir den Namen der ausführbaren Datei nicht angegeben haben, lautet der Standardname a.out . Lass es uns also mit valgrind ausführen:

%Vor%      

Dies führt zusammen mit valgrind eine ausführbare Datei aus, und wenn ein Speicherleck vorhanden ist, wird es angezeigt, wenn die ausführbare Datei beendet wird.

     

Wenn Sie valgrind nicht installiert haben, können Sie es von hier .

    
Ashish Ahuja 29.02.2016 04:24
quelle
5

Ich denke, Sie haben ein oder mehrere nicht initialisierte Felder. Ich bekomme diese Warnungen, wenn ich versuche zu kompilieren:

%Vor%

Wenn ich ASan Was ist ASan ? benutze ich den folgenden Fehler:

%Vor%     
Brian Cain 29.02.2016 04:22
quelle
1

Die Initialisierung von char * fehlt und führt daher zu undefiniertem Verhalten. Bitte initialisieren Sie das Char *

    
frp farhan 29.02.2016 04:17
quelle
0

Sie müssen löschen frei (print) und zuweisen Zeiger.Erste aufgerufen Double frei, und zuletzt verursacht core dumped.Ich arbeite auf Ubuntu und meine GCC-Version ist 4.8.4

    
wjsszka 29.02.2016 04:52
quelle

Tags und Links