因为我不太了解内存分配,所以我想知道删除这样的连续字节(数组)块是否安全。
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));
答案 0 :(得分:5)
您始终删除分配的内容;完全仅分配。如果您background_color
是一件事情,那么您ToggleButton
是一件事情。 “单个内容”恰好占用一个以上的字节这一事实是无关紧要的。您new
就是您delete
。
在这种情况下,如何使我的功能正常工作?
你不知道。您delete
创建了new
个数组。因此,您必须new
个int
数组。类型在C ++中很重要。