0

free除非我调用指针,否则我的 ac 程序似乎运行良好。

#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;
}

我见过很多类似的帖子都提到了无效的下一个尺寸,但不是无效的尺寸

当谈到 c 时,我是一个新手 - 所以我无法弄清楚发生了什么。

4

1 回答 1

7

你正在改变list你的*list++,因此free是无效的。您需要freemalloc.


正如 dasblinkenlight 所指出的,您没有以正确的方式分配内存。我认为您正在使用这个成语,但忘记了 *:

list = malloc(num_groups * sizeof *list);
                                  ^
于 2013-09-24T19:52:16.783 回答