c-为什么我得到双倍免费

  • 本文关键字:免费 c double-free
  • 更新时间 :
  • 英文 :


这是我的代码。我试图对malloc元素进行malloc,但我不知道如何释放它们。

char *d = "apple";
int main() {            
char *a = malloc(10 * sizeof(char));
char **b = &a;
strcpy(a,d);
printf("%c", *b[0]);
b[0] = malloc(3 * sizeof(char));
free(b[0]);
free(a);
}

之后

char **b = &a;

CCD_ 1与CCD_。所以当你做时

b[0] = malloc(3 * sizeof(char));

您正在用这个新分配替换a的值。

则CCD_ 4与CCD_。所以,如果你同时做这两件事,你会两次释放同一内存,这是两次释放。

您还泄漏了分配给a的原始分配,因为您不再有指向该分配的指针。你需要另一个变量来保存它,这样你就可以释放它

char *d = "apple";
int main() {            
char *a = malloc(10 * sizeof(char));
char **b = &a;
strcpy(a,d);
printf("%c", *b[0]);
char *c = a; // save a before overwriting it below
b[0] = malloc(3 * sizeof(char));
free(b[0]);
free(c);
}

相关内容

  • 没有找到相关文章

最新更新