逐字节删除 void* 安全吗?
Is it safe to delete a void* byte by byte?
因为我不太了解内存分配,所以我想知道像这样删除一个连续字节(数组)块是否安全。
void Free(void* ptr, size_t cbSize)
{
if (cbSize == 0) return;
if (ptr == NULL) return;
for(size_t i = cbSize; i > 0; i--)
{
char* p = &((char*)ptr)[i];
delete p;
}
char* p = (char*) (ptr);
delete p;
}
我在以下情况下尝试过此方法,没有报错。
int* a = new int[100];
Free(a, 100 * sizeof(int));
int* a = (int*) malloc(100 * sizeof(int));
Free(a, 100 * sizeof(int));
你总是删除你分配的东西;完全 仅 您分配的内容。如果你 new
一件事情,你 delete
一件事情。 "single thing" 碰巧占用超过一个字节这一事实无关紧要;你 delete
你 new
.
How can i make my function work in this case ?
你不知道。您 new
编辑了一个 int
数组。所以你必须 delete
一个 int
的数组。类型在 C++ 中很重要。
因为我不太了解内存分配,所以我想知道像这样删除一个连续字节(数组)块是否安全。
void Free(void* ptr, size_t cbSize)
{
if (cbSize == 0) return;
if (ptr == NULL) return;
for(size_t i = cbSize; i > 0; i--)
{
char* p = &((char*)ptr)[i];
delete p;
}
char* p = (char*) (ptr);
delete p;
}
我在以下情况下尝试过此方法,没有报错。
int* a = new int[100];
Free(a, 100 * sizeof(int));
int* a = (int*) malloc(100 * sizeof(int));
Free(a, 100 * sizeof(int));
你总是删除你分配的东西;完全 仅 您分配的内容。如果你 new
一件事情,你 delete
一件事情。 "single thing" 碰巧占用超过一个字节这一事实无关紧要;你 delete
你 new
.
How can i make my function work in this case ?
你不知道。您 new
编辑了一个 int
数组。所以你必须 delete
一个 int
的数组。类型在 C++ 中很重要。