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];
简单的问题,但这里的其他类似问题不涉及这个具体案例,所以我可以找到。
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];