VS2013 MFC new delete莫名错误

qq_34470481 2016-04-21 08:05:15
//解密算法
CString CToolManagementView::Decrypt_Ex(LPCTSTR lpszSrc) // 解密函数
{
ASSERT(lpszSrc != NULL && AfxIsValidString(lpszSrc));
const unsigned int BASE64_DECODE_TABLE[256] = {
255, 255, 255, 255, 255, 255, 255, 255, // 00 - 07
255, 255, 255, 255, 255, 255, 255, 255, // 08 - 15
255, 255, 255, 255, 255, 255, 255, 255, // 16 - 23
255, 255, 255, 255, 255, 255, 255, 255, // 24 - 31
255, 255, 255, 255, 255, 255, 255, 255, // 32 - 39
255, 255, 255, 62, 255, 255, 255, 63, // 40 - 47
52, 53, 54, 55, 56, 57, 58, 59, // 48 - 55
60, 61, 255, 255, 255, 255, 255, 255, // 56 - 63
255, 0, 1, 2, 3, 4, 5, 6, // 64 - 71
7, 8, 9, 10, 11, 12, 13, 14, // 72 - 79
15, 16, 17, 18, 19, 20, 21, 22, // 80 - 87
23, 24, 25, 255, 255, 255, 255, 255, // 88 - 95
255, 26, 27, 28, 29, 30, 31, 32, // 96 - 103
33, 34, 35, 36, 37, 38, 39, 40, // 104 - 111
41, 42, 43, 44, 45, 46, 47, 48, // 112 - 119
49, 50, 51, 255, 255, 255, 255, 255, // 120 - 127
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255 };


const int nSrcCount = (int)_tcslen(lpszSrc);
int nSize = nSrcCount / 4 * 3;
if (lpszSrc[nSrcCount - 1] == '=')
nSize--;
if (lpszSrc[nSrcCount - 2] == '=')
nSize--;
char* pOutBuffer = new char[nSize + 3];
ZeroMemory(pOutBuffer, nSize + 3);
LPCTSTR pInBuffer = lpszSrc;
UINT iTest, iPack;
for (int i = 0; i<nSize / 3; i++)
{
for (int j = 0; j<4; j++)
{
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
//InPtr++;
if (iTest == 0xFF)
{
j--;
continue; //读到255非法字符
}
iPack = iPack << 6;
iPack = iPack | iTest;
}
pOutBuffer[2] = iPack;
iPack = iPack >> 8;
pOutBuffer[1] = iPack;
iPack = iPack >> 8;
pOutBuffer[0] = iPack;
//准备写入后3位
pOutBuffer += 3; iPack = 0;

}
switch (nSize % 3)
{
case 1:
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6;
iPack = iPack | iTest;
}
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6;
iPack = iPack | iTest;
}
iPack = iPack >> 4;
pOutBuffer[0] = iPack;
pOutBuffer++;
break;
case 2:
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6;
iPack = iPack | iTest;
}
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6;
iPack = iPack | iTest;
}
iTest = BASE64_DECODE_TABLE[*pInBuffer++]; // Read from InputBuffer.
if (iTest != 0xFF)
{
iPack = iPack << 6;
iPack = iPack | iTest;
}
iPack = iPack >> 2;
pOutBuffer[1] = iPack;
iPack = iPack >> 8;
pOutBuffer[0] = iPack;
pOutBuffer += 2;
break;
default:
break;
}
pOutBuffer -= nSize;
CString strDecode = pOutBuffer;
delete pOutBuffer; //这里编译不过
return strDecode;
}


相同的代码在VC6里面没问题,VS2013就编译不过


错误提示:

错误 1 error C2146: 语法错误: 缺少“;”(在标识符“pOutBuffer”的前面) d:\源代码\84 dewav_tool_system\source\dewav_tool_system_v1.0.0\toolmanagement\toolmanagementview.cpp 396 1 ToolManagement
2 IntelliSense: 应输入“;”

...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
encoderlee 2016-04-24
  • 打赏
  • 举报
回复
new出来后保存原指针,delete的时候要用原指针来delete
用户 昵称 2016-04-23
  • 打赏
  • 举报
回复
在vc6下也会leak memory
schlafenhamster 2016-04-22
  • 打赏
  • 举报
回复
提示是 396行 delete pOutBuffer; //这里编译不过, 这句是 122 行 ?
qq_34470481 2016-04-22
  • 打赏
  • 举报
回复
引用 1 楼 tzxx 的回复:
pOutBuffer创建的是一个数组,释放时应该用delete [] pOutBuffer, 另外你这个pOutBuffer指针还做了计算,恐怕直接释放也会出错。 这代码能在VC6下正确编译的话也是神了
不是运算不运算的问题,VS2013中是直接提示语法错误,我就很纳闷。
Eleven 2016-04-22
  • 打赏
  • 举报
回复
你这里delete不会崩溃吗?你上面的都有修改了pOutBuffer指针的本身的值了。
tzxx 2016-04-21
  • 打赏
  • 举报
回复
pOutBuffer创建的是一个数组,释放时应该用delete [] pOutBuffer, 另外你这个pOutBuffer指针还做了计算,恐怕直接释放也会出错。 这代码能在VC6下正确编译的话也是神了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧