私はこれまでの回答をすべて見てきましたが、見つからないようです。 (私はC++での経験がかなり限られています)ポインタを解放できるかどうかを確認する
私のライブラリでは、私は文字列を解放します。 (驚いたことに?)
ここで問題が発生します。私は、ヒープ上に割り当てられるかもしれないchar *を含む構造体を持っているか、そうでないかもしれません。それは有効なポインタですが、解放することはできません。
IE
char* s1 = "A String";
char* s2 = (char*)memcpy(malloc(9), s1, 9);
free(s2);
free(s1);
が上のエラーが発生します "無料(S1);"s1は実際にはが解放される必要があるため、解放するにはが必要です(これはヒープ上にありません)。これをどのように「許容される」方法で処理できますか? (似たような話題で、 "それをクラッシュさせよう"という答えは妥当ではないように思われる)
構造体はライブラリだけで作成されているわけではないので、何かを使って文字列を正しくコピーすることを保証することはできないmemcpyのように。
これはWindowsライブラリであるため、ISO Cや標準C関数の使用については心配する必要はありません。
ベストの答え(私見): 'struct'はもっぱら図書館で作成し_is_ことを保証するために、不透明なポインタを使用してください。 (Windowsを使用しているともっと助けてくれるでしょう) –
最悪の場合は最悪になりますが、SEHを使用することもできます(後者は私に何か間違っているように感じさせるでしょう) – James
これがWindowsライブラリであることを確認するには、引数をBSTRにします。次に、ユーザが適切に( 'SysAllocString'を使って)それを割り当てる必要があり、あなたは一致するデアロケータを使うことが保証されています。他の方法はちょうど...悪いです。もしあなたのユーザが別のコンパイラを持っていれば、 'malloc'を使っても' free() 'できません。 –