除非我在指针上调用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来说,我是新手 - 所以我无法理解正在发生的事情。
答案 0 :(得分:6)
您正在使用list
更改*list++
,因此free
无效。您需要free
从malloc
获得的原始指针。
正如dasblinkenlight所说,你没有以正确的方式分配内存。我想你是为了这个成语,但忘记了*:
list = malloc(num_groups * sizeof *list);
^