Strdup() und strcpy
void x( )
{
strcpy(a, strdup(p) );
}
(error) die Zuweisung mit strdup, strcpy nicht loslassen
Kann mir jemand sagen, was falsch ist mit der obigen Aussage und der Grund warum ich diese Fehlermeldung bekommen?
was zum Teufel wollen Sie tun?
nichts 😀 eigentlich nur Schritte bei der Programmierung,beim Lesen Formen sah ich diese Funktion versucht einige Kombinationen...(nur zum Spaß)
Je nach Ihren Bedürfnissen, die Sie tun sollten, entweder
ich habe diesen code von irgendwo....ich wusste nicht, über strdup () - Funktion und auch Sie sagte, es gibt Chancen auf memory leaks...ich wusste nicht, dass strdup wird, benutzen Sie malloc-und Speicher dachte ich, es wird eine temporäre variable ....so wird es aus dem Speicher entfernt werden, wenn Umfang, die Funktion endet.
nichts 😀 eigentlich nur Schritte bei der Programmierung,beim Lesen Formen sah ich diese Funktion versucht einige Kombinationen...(nur zum Spaß)
Je nach Ihren Bedürfnissen, die Sie tun sollten, entweder
a = strdup(p);
(a
ist jetzt dynamisch zugewiesenen) oder strcpy(a, p);
(meint a
weist bereits auf einen Puffer von ausreichender Größe). Kombiniert man diese nennt, ist sinnlos.ich habe diesen code von irgendwo....ich wusste nicht, über strdup () - Funktion und auch Sie sagte, es gibt Chancen auf memory leaks...ich wusste nicht, dass strdup wird, benutzen Sie malloc-und Speicher dachte ich, es wird eine temporäre variable ....so wird es aus dem Speicher entfernt werden, wenn Umfang, die Funktion endet.
InformationsquelleAutor lokesh | 2011-09-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie sind undicht Speicher. Der Aufruf
strdup
Speicher reserviert, die nicht freigegeben wird. Der Zeiger auf den Speicher übergeben wirdstrcpy
ist nirgendwo gespeichert und der compiler kann deshalb beweisen, dass es durchgesickert.Ich bin mir nicht sicher, was Sie versuchen zu tun, weil
strdup
führt die Zuweisung und das kopieren, der Aufrufstrcpy
scheint überflüssig.Du verstehst das nicht.
strdup
Speicher reserviert. Das ist dann anstrcpy
, aberstrcpy
nicht freigeben, Speicher, weil das nicht seine Aufgabe. Also den Speicherstrdup
ist nicht freigegeben.oh habe es danke.....denn wir haben gespeichert die Adresse des neu reservierten Arrays,werden wir nie in der Lage sein, um Sie zu löschen 😀
Genau! Vergessen Sie nicht, akzeptieren Sie eine Antwort auf diese Frage (und die vorherigen). Siehe hier für weitere details: meta.stackexchange.com/questions/5234/...
danke, war neu....hatte keine Ahnung, dass u sollen annehmen, eine Antwort 😀
InformationsquelleAutor David Heffernan
strdup etwas zu tun ähnlich wie diese (aus paxdiablo Antwort hier) :-
}
SO undicht das Speicher, die zugewiesen wurde innerhalb strdup führt zu diesem Fehler .
InformationsquelleAutor Sandeep Pathak
Das problem ist
strdup
Anrufemalloc()
im inneren und leitet die resultierende Zeiger auf den code. Der code nicht in Besitz nehmen, dass der Speicher zugewiesen, und es ist durchgesickert. Sie code ist in etwa das tun:den oben genannten code nicht
free()
Speicher verweistduplicate
.InformationsquelleAutor sharptooth