-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'。 –