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

时间:2018-10-15 00:42:49

标签: 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;
}

在以下情况下,我尝试了此方法,但没有出现错误。

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

int* a = (int*) malloc(100 * sizeof(int));
Free(a, 100 * sizeof(int));

1 个答案:

答案 0 :(得分:5)

您始终删除分配的内容;完全分配。如果您background_color是一件事情,那么您ToggleButton是一件事情。 “单个内容”恰好占用一个以上的字节这一事实是无关紧要的。您new就是您delete

  

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

你不知道。您delete创建了new个数组。因此,您必须newint数组。类型在C ++中很重要。