逐字节删除 void* 是否安全?

Is it safe to delete a void* byte by byte?

本文关键字:是否 安全 void 字节 删除      更新时间:2023-10-16

因为我对内存分配了解不多,所以我想知道像这样删除连续字节(数组(块是否安全。

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一件事。"单个事物"碰巧占用多个字节这一事实无关紧要;你deletenew.

在这种情况下,我怎样才能让我的函数工作?

你没有。你new了一组int。因此,您必须delete一个int数组。类型在C++中很重要。