私はCでこの問題を抱えています。
以下の発言があります。
int *a;
a=malloc(100);
そして、次のエラーが表示されます。
エラー: 'void*' から 'int*' への無効な変換 [-fpermissive]
これに関するヒントはありますか?
コードを C++ としてコンパイルしていますが、使用したコードは無効です。ただし、C の場合は有効であり、キャストを追加しないでください。
ただし、への引数malloc()
はchar
s にあることに注意してください。したがって、「100」は少しランダムです。100 個の整数が必要な場合は、次のようにします。
a = malloc(100 * sizeof *a);
C++ で C 互換コードを作成する場合、malloc
純粋な C ライブラリが使用されるために使用する必要がある場合はfree
、型付きの malloc をすばやく作成することをお勧めします。
template<typename T>
T* typed_malloc( size_t count = 1 ) {
return reinterpret_cast<T*>( malloc(sizeof(T)*count) );
}
次に、次のように使用します。
int *a;
a=typed_malloc<int>(100);
これにより、100 秒のサイズのバッファーが作成されますint
。
この方法で自明でないデストラクタを使用してクラスを作成しないようにするなど、いくつかの追加要素を追加することfree
もお勧めします (それらが破壊されずに d されることが予想されるため)。
malloc
void* ポインタを返しています。
やったほうがいい :
a=(int*)malloc(100);
ところで: このステートメントは 100 バイトではなく 100 バイトを割り当てています。LE: gcc でコンパイルする場合、これは必要ありません。g++ でコンパイルする場合、これは必須です。