memcpy释放原始内存吗?

时间:2017-06-11 09:47:21

标签: c

当使用memcpy()时,这会释放原始内存吗? 这是为了评估,所以我不能共享原始代码。代码可以工作,但valgrind显示了声明原始数组的内存泄漏。

例如:

//first array
animal** dogs= malloc(sizeof(animal*) * 5);
for(int i = 0; i < 5; i++){
    dogs[i] = malloc(sizeof(animal));
    dogs[i]->name = "doggo";
}

//second array
animal** cats; = malloc(sizeof(animal*) * 3);
for(int i = 0; i < 3; i++){
    cats[i] = malloc(sizeof(animal));
    cats[i]->name = "Kitty";
}

//third array -- combination of first and second array
animal** all_animals = malloc(sizeof(animal*) * 8);
memcpy(all_animals, dogs, sizeof(animal*) * 5);
memcpy(all_animals + 5, cats, sizeof(animal*) * 3);

我需要释放狗,猫和all_animals吗?或者仅释放all_animals就足够了?

2 个答案:

答案 0 :(得分:8)

Memcpy只是一个内存副本,它没有什么聪明的东西 - 也不应该。

  memcpy是最快的库例程   内存到内存的复制。

因此,你需要释放所有物品,狗,猫,sqirrel等。

答案 1 :(得分:2)

当需要移动一些内存块或新大小为0时,唯一的函数(在标准C中)释放内存为free()realloc()