使用安全零内存新建/删除时出现问题
Issue with new/delete with SecureZeroMemory
谁能帮助我理解为什么我的代码在第一个代码块中的 delete[] szPassword 上失败?我知道 szPassword 只是复制"a",而 st2 等于 8:
TCHAR *szPassword = new TCHAR[2]();
StringCchCopy(szPassword, 2, L"ab");
SIZE_T st2 = sizeof(szPassword);
SecureZeroMemory(szPassword, st2);
delete[] szPassword;
但是,当它运行时,在没有获取 sizeof(( 值的情况下,它可以正常工作:
TCHAR *szPassword = new TCHAR[2]();
StringCchCopy(szPassword, 2, L"ab");
SecureZeroMemory(szPassword, 2);
delete[] szPassword;
szPassword 是一个指针,而不是一个数组,因此sizeof(szPassword)
将是 4 或 8。在 64 位应用程序中,这太多了,您将尝试将 8 个字节写入 4 字节缓冲区。
C++运行时允许分配的比您要求分配的更多,并且它经常这样做,以便它可以将特殊数据添加到缓冲区的末尾,以便它可以检测缓冲区溢出。
请改为执行以下操作:
const UINT charcount = 2;
TCHAR *szPassword = new TCHAR[charcount];
...
SecureZeroMemory(szPassword, charcount * sizeof(TCHAR));
delete[] szPassword;
如果缓冲区总是很小,您可以在堆栈上使用数组:
TCHAR szPassword[200];
...
SecureZeroMemory(szPassword, sizeof(szPassword));
相关文章:
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 目录删除 MFC 的问题
- 关于比较两个无序数组并删除 a[] 中可以在 b[] 中找到的元素的问题
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- C++删除/(递归)对象销毁问题
- Sinlge 链表,C++,删除所有和搜索功能的问题
- C++ 从链表中删除项目时出现问题
- delete[]有问题,如何部分删除内存
- 关于从驱动器中删除文件的问题
- 删除数组 c++ 崩溃问题
- 为什么当我从语句检查中删除"+ mod"时,以下程序给出错误的答案。问题链接:https://www.codechef.com/problems/FFC219B
- 在 QLayout 中创建和删除自定义 QWidgets 时出现 RAM 问题
- 代码问题.使用矢量删除相同的数字,除了它的最后一个入口
- 使用安全零内存新建/删除时出现问题
- 从ints向量删除int的问题
- 如何解决删除其他人之间共享的对象的问题
- 双向链表问题(特别是复制构造函数和删除函数)
- C++二进制搜索树删除问题
- 回文查找器:非字母数字字符删除问题
- QSA 的子对象删除问题