C 内存管理与 int 指针(数组)?

C Memory management with int pointer (array)?

简单的问题,但这里的其他类似问题不涉及这个具体案例,所以我可以找到。

int * moves;
moves = malloc(540); //540 is the most i will ever need, usually less
someFunctionThatFillsSomeOfThoseSlots // also returns how many slots were used

int * final = malloc(size+1);

for(x = 0; x < size; x++, final++, moves++)
    final = moves;
final -= size;

更改指针后,我应该如何释放移动的内存?

这个

final = moves;

将变量 final 重新分配给 moves,因此刚刚分配的指针在内存泄漏的宇宙中丢失了。

您的意思可能是:

*final = *moves;

final指向的位置赋值给moves指向的值。

但这并不能解决您的问题,因为如果您丢失了 malloc 最初为 moves 提供的地址,您将无法 free 它。您可以 free(moves - size) 但这很复杂。

为什么不直接使用 [] 运算符?

for (int x = 0; x < size; ++x)
  final[x] = moves[x];