5行目のエラーで以下のコードで問題が発生しています:
エラー:
void*
からchar*
への無効な変換
コードブロックでg ++を使用していて、このファイルをcppファイルとしてコンパイルしようとしました。それは重要ですか?
#include <openssl/crypto.h>
int main()
{
char *foo = malloc(1);
if (!foo) {
printf("malloc()");
exit(1);
}
OPENSSL_cleanse(foo, 1);
printf("cleaned one byte\n");
OPENSSL_cleanse(foo, 0);
printf("cleaned zero bytes\n");
}
C++では、malloc()
の戻り値をキャストする必要があります
char *foo = (char*)malloc(1);
C++はCよりも型安全であるように設計されているため、(自動的に)fromvoid*
to別のポインタ型に変換できません。ファイルは.cpp
であるため、コンパイラはC++コードを予期しています。前述のように、char*
をvoid*
に割り当てているため、mallocの呼び出しはコンパイルされません。
ファイルを.c
に変更すると、Cコードが必要になります。 Cでは、void*
と別のポインター型の間のキャストを指定する必要はありません。ファイルを.c
に変更すると、正常にコンパイルされます。
これはmallocのある行だと思います。結果をキャストします-char *foo = (char*)...
それで、あなたの意図は何でしたか? CプログラムまたはC++プログラムを作成しようとしていますか?
Cプログラムが必要な場合は、C++としてコンパイルしないでください。つまり、ファイルに「.cpp」拡張子を付けたり、ファイルをCとして扱うようコンパイラーに明示的に依頼しないでください。C言語では、結果をキャストしないでください。 malloc
の。質問に[C]のタグを付けたので、これが必要だと思います。
malloc
を使用するC++プログラムが必要な場合、malloc
の戻り値を適切な型に明示的にキャストする以外に選択肢はありません。