-2
typedef struct
{
long nIndex; // object index
TCHAR path[3 * MAX_TEXT_FIELD_SIZE];
}structItems;
void method1(LPCTSTR pInput, LPTSTR pOutput, size_t iSizeOfOutput)
{
size_t iLength = 0;
iLength = _tcslen(pInput);
if (iLength > iSizeOfOutput + sizeof(TCHAR))
iLength = iSizeOfOutput - sizeof(TCHAR);
memset(pOutput, 0, iSizeOfOutput); // Access violation error
}
void main()
{
CString csSysPath = _T("fghjjjjjjjjjjjjjjjj");
structItems *pIndexSyspath = nullptr;
pIndexSyspath = (structItems *)calloc(1, sizeof(structItems) * 15555555); //If i put size as 1555555 then it works well
method1(csSysPath, pIndexSyspath[0].path, (sizeof(TCHAR) * (3 * MAX_TEXT_FIELD_SIZE)));
}
这是导致崩溃的示例代码。存储区访问冲突错误
- 在上面的代码,如果我们把1555555的大小,那么它效果很好(我随机减少大小的数字)。
- 这是16GB的RAM在64位操作系统赢运行
我恳请一些人帮助我理解释放calloc之间的不良和关系的原因32位应用程序 - 大小 - memset的。
您是否检查过分配*工作*,calloc没有返回空指针? –
如果你使用C++编程,为什么要使用'typedef'和'calloc'? –
更重要的是,为什么使用'memset'将内存设置为零?你不知道['calloc'](http://en.cppreference.com/w/cpp/memory/c/calloc)已经做到了吗?使用'calloc'相当于'malloc'后面跟'memset'。 –