结构数组 - C中的内存释放

Sou*_*jit 1 c struct memory-management priority-queue data-structures

我正在尝试使用静态数组实现基于二进制堆的优先级队列(我稍后将使用链表,只是想先用数组进行测试).

typedef struct n
{
    int x;
    int y;
    int size;
    double value;
} node;

node arr[100];
int total = 1;

void insertElement(int x, int y, int size, double value)
{
    node n;
    n.x     = x;
    n.y     = y;
    n.size  = size;
    n.value = value;

    arr[total] = n;

    if (total > 1)
        insertArrange(total);

    total += 1;
}
Run Code Online (Sandbox Code Playgroud)

现在在删除功能中,我将返回最顶层节点并将其删除,然后重新排列整个堆.问题是我无法释放任何记忆.假设我使用

free(&arr[1]);
Run Code Online (Sandbox Code Playgroud)

我得到指针被释放没有分配错误.这是正确的实施方式吗?如何解决内存问题?

我正在使用Xcode和Apple LLVM 4.2编译器.这整个事情最终将被放入Objective-C中的一个更大的项目中,但是现在我不想使用NSMutableArray.我想要一个简单的C解决方案.

Bat*_*eba 5

如果使用了malloc()或calloc(),则只需要调用free().事实上,试图释放任何其他东西是未定义的行为.

就目前而言,您的代码不会泄漏任何内存.

  • @Soumyajit,arr []是堆栈分配的; 你不能试图删除任何内存. (2认同)