2012-04-01 18 views
0

ポインタに100倍の配列を動的に割り当て、1.0から100.0の値でメモリを初期化するコードがあります。どのように値を割り当てる間、配列ポインタをインクリメントする必要はありません

私の質問は、以下のコードで、forループの各繰り返しで* ptr ++を書く必要がないのです。私はそれを試して、それは動作しません。

void allocate_array(){ 
    double *ptr; 
    ptr= (double*)malloc(sizeof(double)*100); 
    int i=0; 
    float j=0.0; 
    for(i=0;i<100;i++){ 
     *ptr=j++; 
     printf(" %0.1lf\n",*ptr); 
    } 
} 
+0

あなたはそうする必要はありませんか? '0.0、1.0、... 'の値を配列の最初のインデックスに割り当てます。そして、あなたは決して他の指標に何も割り当てません。 {99.0、???、???、...} – Imp

+0

try ptr [i] = j ++; – RolandXu

答えて

3

まあ、何もする必要はありません。コードでは、配列全体を初期化しません。最初のメンバーに100種類の異なる値を割り当てます。あなたのコードが好きなだけさ:

double d; 
for(i=0;i<100;i++){ 
      d=j++; 
      printf(" %0.1lf\n",d); 
} 

あなたは、全体の配列を初期化ような何かしたい場合は:あなたはメモリあなたへのポインタを返すされていないので、この問題の

double *temp=ptr; 
for(i=0;i<100;i++){ 
      *temp=j++; 
      printf(" %0.1lf\n",*temp++); 
} 
+2

また、 'temp [i]]を使うと、 '、それは' * temp ++ 'よりも読みやすい。 – Mat

+0

@Matはい、しかしOPは '* ptr ++'を求めました。 (それはなぜ私が 'printf'で書いたのか) – asaelr

+0

でも、何かを割り当てるたびにiterating * tempではなく、* temp ++ = j ++? –

1

なしに割り当てられました。あなたは単に記憶を漏らしているだけです。

このような何か試してみてください:

double *allocate_array(size_t size) 
{ 
    double *ptr = malloc(sizeof *ptr * size); // note no cast, operand of sizeof 
    if (ptr) 
    { 
    size_t i; 
    for (i = 0; i < size; i++) 
    { 
     ptr[i] = (double) (i+1); // ptr[0] = 1.0, ptr[1] = 2.0, ptr[2] = 3.0, etc. 
    } 
    } 
    return ptr; 
} 

を、あなたはあなたが配列で終了したら、あなたはそれを解放する必要がある

double *myArray = allocate_array(100); 

のようにそれを呼びたい:

free(myArray); 

のいずれかがにありません。allocate_arrayは、値をptrに変更します。少なくとも、その値を他の場所に保存しないでください。さもなければ、あなたはfreeそれを正しくすることができません。

関連する問題