2017-11-12 16 views
-1

浮動小数点の固定サイズの配列で構成される配列をどのように割り当てますか? は、私はこれを試してみました:固定サイズの配列の動的配列

float **sub_uvs = malloc(sizeof(float [2]) * size * size); 
/* Seg. fault */ 
sub_uvs[0][0] = 0.3; 
sub_uvs[0][1] = 0.4; 
+1

'MEM_mallocN'、なぜあなたはそれを使用しなければならないのは何ですか? –

+0

Googleは「MEM_mallocN」はBlenderのもので、サイズとタグ文字列を取ります。 – Potatoswatter

答えて

2

可変サイズの多次元配列は依然として扱いにくいです。いくつかのオプション:

  1. 配列へのポインタの配列を使用します。ポインターの配列にはmallocを1つ使用し、mallocにループして各行配列を作成します。しかし、これは全く異なるデータ構造です。

  2. メモリ管理と多次元インデックス作成方法を提供するクラスを見つけます。おそらく、ブレンダーには1つありますか?

  3. Eigenまたは同様の完全な数学ライブラリを使用してください。

+0

ええ、私はこのようなものを書くことが可能かもしれませんが、 'float ** sub_uvs = malloc(sizeof(2つの浮動小数点数)* size * size);'、私は構造体を代わりに使用します。 –

+0

@MacelaruTiberiu問題は、 '**'は配列へのポインタの配列を示しますが、それを1つの多次元配列として使用しようとしていることです。 – Potatoswatter

2

あなたはおそらくMEM_allocNに別の呼び出しを使用して、二番目の配列のための別の、個別の割り当てを実行する必要があります。プラットフォームが提供するどのような割り当て解除機能を使用しても、このメモリを別途解放する必要があります。

メモリの表現はまったく異なります。したがって、構文的に便利な場所であっても、どこでもこの作業を行うことは難しいでしょう。

1

か、以下を使用することができます:)

float **a; 
a = (float **)malloc(sizeof(float *) * size_row); 

for(int i=0;i<size_row;i++) 
{ 
    a[i] = (float *)malloc(sizeof(float) * size_col); 
} 
a[0][0] = 0.4; 

printf("%f",a[0][0]); 
関連する問題