这个问题很简单,但这里的其他类似问题都不涉及这个特定的案例,或者我可以找到。
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;
其将moves
所指向的值分配给final
所指向的位置。
但这并不能解决你的问题,因为如果你丢失了malloc最初为moves
提供的地址,你就不能free
。你可以做free(moves - size)
,但这很复杂。
为什么不直接使用[]
运算符呢?
for (int x = 0; x < size; ++x)
final[x] = moves[x];