首页 > 解决方案 > 逐字节删除 void* 是否安全?

问题描述

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

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));

标签: c++allocation

解决方案


你总是删除你分配的东西;准确且只有您分配的内容。如果你new是一件事,你delete就是一件事。“单一事物”恰好占用超过一个字节的事实是无关紧要的;你delete什么你new

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

你没有。你new编辑了一个 s 数组int。所以你必须delete是一个s数组int。类型在 C++ 中很重要。


推荐阅读