小编SlL*_*Wre的帖子

阵列重新初始化会导致内存泄漏吗?

我在 SO 上找到了一个答案,建议使用以下解决方案来重新初始化 c 中的数组。

int *foo = (int[]){1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

我不确定这样的语法到底会做什么,我有几个问题:

如果我的数组是之前创建的,它会导致内存泄漏吗?

double *my_array = (double[]){1.1, 2.2, 3.3, 4.4, 5.5};

...

my_array = (double[]){-1.1, -2.2, -3.3}; // Do i need to call free(my_array) first?
Run Code Online (Sandbox Code Playgroud)

是否允许在函数调用中使用这种方法?

void foo(int *arr)
{
  arr = (int[]){-2, -7, 1, 255};
}

int main()
{
  int *my_array = (int[]){1, 2, 3};
  foo(my_array);
  
  if (my_array[2] != 1)
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

概括:

  • 这种语法是否只是使用预定义的值在堆中分配新内存并返回指针?
  • 它会自动清除前一个指针中的所有内容吗?

c c99

2
推荐指数
1
解决办法
67
查看次数

标签 统计

c ×1

c99 ×1