c++ - 逐字节删除 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));
解决方案
你总是删除你分配的东西;准确且只有您分配的内容。如果你new
是一件事,你delete
就是一件事。“单一事物”恰好占用超过一个字节的事实是无关紧要的;你delete
什么你new
。
在这种情况下如何使我的功能正常工作?
你没有。你new
编辑了一个 s 数组int
。所以你必须delete
是一个s数组int
。类型在 C++ 中很重要。
推荐阅读
- cypress - 如何使用不同的 Cypress.env() 变量进行 Circle 测试?
- frontend - 在生产中更新现有的 SPA 项目(维护模式?)
- reactjs - react -npm run build 生成一个空页面
- python - 如何在python列中使用多索引访问数据
- excel - 如何从一个excel表中获取数据并将其添加到不同表中的匹配行?
- c# - 假脱机由 Observable.FromEvent 生成的正在进行的项目
- r - 用R计算多个多边形之间的最小距离
- javascript - Internet Explorer 中的 Angular 无效日期错误
- python - 如何在 Python 中以异步方法上传到 Google Drive
- javascript - 如何创建一个带有反应的小部件以集成到其他反应应用程序中?