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

Cai*_*ale -2 c++ allocation

因为我不太了解内存分配,我想知道是否可以安全地删除这样的连续字节(数组)块.

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;
}
Run Code Online (Sandbox Code Playgroud)

我在以下情况下尝试过这种方法并没有出错.

int* a = new int[100];
Free(a, 100 * sizeof(int));

int* a = (int*) malloc(100 * sizeof(int));
Free(a, 100 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

Nic*_*las 5

你总是删除你分配的内容; 确切地,只有你分配的东西.如果你new是一件事,你就是delete一件事."单一事物"恰好占用多个字节这一事实无关紧要; 你delete是什么人new.

在这种情况下如何使我的功能工作?

你没有.你new编了一个ints 数组.所以你必须有delete一个ints 数组.类型在C++中很重要.