Ich habe überall nach einer Antwort gesucht, kann aber keine finden. (Ich habe ziemlich begrenzte Erfahrung mit C++)Überprüfung, ob ein Zeiger freigegeben werden kann
In meiner Bibliothek gebe ich eine Zeichenfolge frei. (Erstaunlich, nicht wahr?)
Dies ist, wo das Problem auftritt. Ich habe eine Struktur, die ein Zeichen * enthält, das auf dem Heap zugeordnet werden kann oder nicht sein kann. Während es ein gültiger Zeiger ist, kann es nicht freigegeben werden.
IE
char* s1 = "A String";
char* s2 = (char*)memcpy(malloc(9), s1, 9);
free(s2);
free(s1);
Wird ein Fehler verursacht auf "frei (s1);" (Wie es sollte) Weil s1 nicht wirklich braucht, um befreit zu werden, (es ist nicht auf dem Haufen) wie kann ich das auf eine "akzeptable" Art und Weise behandeln? (Bei ähnlichen Themen schien die Antwort "lass es abstürzen" nicht angemessen IMO)
Da die Struktur nicht nur von der Bibliothek erstellt wird, ist es nicht möglich zu garantieren, dass eine Zeichenfolge ordnungsgemäß mit etwas überkopiert wird wie memcpy.
Da dies eine Windows-Bibliothek ist, muss ich mich nicht um die Verwendung von ISO C-Stuff oder C-Standardfunktionen kümmern.
Beste Antwort (IMHO): ein undurchsichtigen Zeiger verwenden zu gewährleisten, dass die 'struct' _is_ in der Bibliothek allein erstellt. (Ich würde mehr Hilfe anbieten, wenn ich Windows benutze. Entschuldigung. +1.) –
Danke, wenn es am schlimmsten wird, kann ich das entweder tun oder SEH benutzen (obwohl letzteres mir das Gefühl geben würde, etwas falsch zu machen) – James
Da dies eine Windows-Bibliothek ist, machen Sie das Argument zu einem BSTR. Dann müssen Sie den Benutzer richtig zuordnen (mit 'SysAllocString') und Sie werden garantiert einen passenden Deallocator verwenden. Andere Methoden sind nur ... schlecht. Wenn Ihr Benutzer einen anderen Compiler hat, können Sie den String nicht "frei()", auch wenn er 'malloc' verwendet –