【问题标题】:Dynamic Memory Deletion in vc++vc++中的动态内存删除
【发布时间】:2015-05-23 15:15:59
【问题描述】:

我在我的代码中使用 _aligned_malloc。但它会抛出错误错误,如图所示。

CString sBuffer = _T("Hello");
TCHAR*   pBuffer; 

pBuffer = (TCHAR *)_aligned_malloc(1024, 16);

if (pBuffer == NULL) {
    ...............Error .. msg 
}

pBuffer =  sBuffer.GetBuffer(sBuffer.GetLength());

..................................................
.........................................................

sBuffer.ReleaseBuffer(sBuffer.GetLength());

if (pBuffer != NULL) {
    _aligned_free(pBuffer);
}

【问题讨论】:

  • pBuffer = sBuffer.GetBuffer(...) 在此之后,pBuffer 不再指向由_aligned_malloc 分配的内存块(该内存块已泄漏)- 它指向由@987654326 分配的内存块@。此外,在随后的sBuffer.ReleaseBuffer() 调用之后,pBuffer 是一个悬空指针,不应该用于任何事情——尤其是尝试释放它不再指向的内存。

标签: visual-c++ mfc


【解决方案1】:

CString 类实现了(LPCTSTR) 转换运算符,您可以使用它来获取const TCHAR*。 请注意TCHARMBCS模式下定义为char,在UNICODE模式下定义为wchar。有关详细信息,请参阅定义的 tchar.h

如果您想修改缓冲区的内容,您需要使用GetBuffer() 方法。完成后不要忘记致电ReleaseBuffer()。因此,无需手动分配内存。

您还可以从TCHAR* 轻松构造CString。有一个构造函数可以做到这一点。

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 1970-01-01
    • 2013-12-27
    • 2011-06-17
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多