2017-03-10 59 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);