当使用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就足够了?
答案 0 :(得分:8)
Memcpy只是一个内存副本,它没有什么聪明的东西 - 也不应该。
memcpy是最快的库例程 内存到内存的复制。
因此,你需要释放所有物品,狗,猫,sqirrel等。
答案 1 :(得分:2)
当需要移动一些内存块或新大小为0时,唯一的函数(在标准C中)释放内存为free()
和realloc()
。