操作系统:Windows x86、MFC、CRT、VS2010
从 Visual Studio 2005 (SP1) 升级到 VS2010-SP1 后,我遇到了运行时 CRT 堆损坏异常。
当我的应用程序使用调试编译时,CRT 只会抱怨损坏。而且我认为 VS2010 在评估内存访问时过于严格。
可疑的违规代码执行以下操作:
typedef struct _T_TEST
{
DWORD flag;
TCHAR str[1];
} T_TEST;
// Then the structure is used in this way
void test(TCHAR * p_str) {
DWORD size = sizeof(DWORD) + (_tcslen(p_str) + 1) * sizeof(TCHAR);
T_TEST * foo = (T_TEST *) calloc(size, 1);
foo->flag = 0;
_tcscpy_s(foo->str, size - sizeof(DWORD), p_str);
// Do IPC with the struct
// When finished, free it
free(foo);
}
此代码有时会在free(foo)
将分配的缓冲区转换为(T_TEST *)
.
以这种方式扩展结构大小是否有效?VS2010 中是否有一些不同的东西将其视为堆损坏?
任何帮助将不胜感激!