2017-03-10 4 views
1

私はメモリ割り当てを行った後、このint配列の初期化に関するこの小さな質問を受けました。私は、エラーの下になった:Int mallocの後の配列の初期化

"Line 7 Error: expected expression before '{' token"

は、これは私のコードです:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int i; 
    int *x=malloc(3*sizeof(int)); //allocation 
    *x={1,2,3}; //(Line 7) trying to initialize. Also tried with x[]={1,2,3}. 
    for(i=0;i<3;i++) 
    { 
     printf("%d ",x[i]); 
    } 
    return 0; 
} 

は、私はメモリ割り当てを行った後、私の配列を初期化するための他の方法はありますか?

答えて

0

まず、配列のメモリがヒープメモリ領域に割り当てられていることを理解する必要があります。したがって、以下の方法で初期化することができます。二つの方法の上方memcpy関数を

  • ポインタ演算
  • を用い

    • malloc関数を介してメモリの割り当てを維持します。 ただし、(int []){1,2,3}を使用すると、割り当て済みのヒープメモリによって、のメモリが無駄になります。

      int* x = (int*) malloc(3 * sizeof(int)); 
      printf("memory location x : %p\n",x); 
      
      // 1. using memcpy function 
      memcpy(x, (int []) {1,2,3}, 3 * sizeof(int)); 
      printf("memory location x : %p\n",x); 
      
      
      // 2. pointer arithmetic 
      *(x + 0) = 1; 
      *(x + 1) = 2; 
      *(x + 2) = 3; 
      printf("memory location x : %p\n",x); 
      
      // 3. assignment, useless in case of previous memory allocation 
      x = (int []) { 1, 2, 3 }; 
      printf("memory location x : %p\n",x);