Ich habe diesen Fehler verfolgt, aber ich verstehe ihn einfach nicht. Habe ich einige grundlegende C oder etwas vergessen?
==28357== Conditional jump or move depends on uninitialised value(s)
==28357== at 0x4C261E8: strlen (mc_replace_strmem.c:275)
==28357== by 0x4E9280A: puts (ioputs.c:36)
==28357== by 0x400C21: handlePath (myshell.c:105)
==28357== by 0x400B17: handleInput (myshell.c:69)
==28357== by 0x400AAD: acceptInput (myshell.c:60)
==28357== by 0x4009CF: main (myshell.c:33)
==28357== Uninitialised value was created by a heap allocation
==28357== at 0x4C25153: malloc (vg_replace_malloc.c:195)
==28357== by 0x400BDE: handlePath (myshell.c:99)
==28357== by 0x400B17: handleInput (myshell.c:69)
==28357== by 0x400AAD: acceptInput (myshell.c:60)
==28357== by 0x4009CF: main (myshell.c:33)
==28357==
(095) void handlePath(char *input) {
(096) if(DEBUG_ON) { printf("%s%s\n", "DEBUG_HANDLEPATH: ", input); }
(097)
(098) char *inputCopy = NULL;
(099) inputCopy = (char *)malloc((strlen(input)+1)*sizeof(char));
(100)
(101) if(inputCopy==NULL) {
(102) die("malloc() failed in handlePath()");
(103) }
(104) strncpy(inputCopy, input, strlen(input)*sizeof(char));
(105) printf("%s\n", inputCopy);
(106) free(inputCopy);
(107) return;
(108) }
Zeile 96 gibt den Parameter "char *input" problemlos aus (DEBUG_ON==1), aber Zeile 105 spuckt valgrind-Fehler aus (in der Konsole wird er jedoch problemlos ausgegeben). "char *input" stammt von einem getline(), das eine Eingabezeile abgreift, und ist im Fall dieser Funktion etwas wie "path /test/path" ohne Anführungszeichen. Ich kann es in den vorhergehenden Funktionen problemlos ausgeben und bearbeiten. Was ist an "char *inputCopy" uninitialisiert? Irgendwelche Ideen? Vielen Dank im Voraus!