malloc之后的Int Array初始化

时间:2017-03-10 18:40:26

标签: arrays memory allocation

在我进行内存分配后,我得到了关于这个int数组初始化的小问题。我得到以下错误:

  

“第7行错误:在'{'令牌”

之前的预期表达式

这是我的代码:

#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;
}

在进行内存分配后,还有其他方法可以初始化我的数组吗?

1 个答案:

答案 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);