free(ptr)错误 - 大小无效

时间:2013-09-24 19:51:10

标签: c

除非我在指针上调用free,否则我的c程序似乎正常。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    int i;
    gid_t *list;

    int num_groups = getgroups(0, NULL);

    list = malloc(num_groups * sizeof(list));

    if (getgroups(num_groups, list) != -1)
    {
        for (i = 0; i < num_groups; i++)
        {
            printf("%d ", *list++);
        }
    }
    free(list); // free(): invalid size: 0x0000000002448040 ***
    return 0;
}

我看到lots of similar posts引用无效的下一个尺寸,但不是无效尺寸

对于c来说,我是新手 - 所以我无法理解正在发生的事情。

1 个答案:

答案 0 :(得分:6)

您正在使用list更改*list++,因此free无效。您需要freemalloc获得的原始指针。


正如dasblinkenlight所说,你没有以正确的方式分配内存。我想你是为了这个成语,但忘记了*:

list = malloc(num_groups * sizeof *list);
                                  ^