-1

私はCでこの問題を抱えています。

以下の発言があります。

int *a;
a=malloc(100);

そして、次のエラーが表示されます。

エラー: 'void*' から 'int*' への無効な変換 [-fpermissive]

これに関するヒントはありますか?

4

3 に答える 3

11

コードを C++ としてコンパイルしていますが、使用したコードは無効です。ただし、C の場合は有効であり、キャストを追加しないでください

ただし、への引数malloc()chars にあることに注意してください。したがって、「100」は少しランダムです。100 個の整数が必要な場合は、次のようにします。

a = malloc(100 * sizeof *a);
于 2012-12-12T15:50:56.880 に答える
0

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 されることが予想されるため)。

于 2012-12-12T16:05:16.343 に答える
-4

mallocvoid* ポインタを返しています。

やったほうがいい :

a=(int*)malloc(100);

ところで: このステートメントは 100 バイトではなく 100 バイトを割り当てています。LE: gcc でコンパイルする場合、これは必要ありません。g++ でコンパイルする場合、これは必須です。

于 2012-12-12T15:47:59.023 に答える