new 与delete 的问题

youlitai0116 2008-06-09 11:27:48
TCHAR* filename = new TCHAR[100];
………………
delete []filename;
filename= NULL;

这个有问题吗? 怎么会出现堆内存被破坏的情况,我的是vs2005,不会是编译器的原因吧 。
本人新手,别笑话啊!
...全文
71 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallenbluefire 2008-06-09
  • 打赏
  • 举报
回复
TCHAR* filename = new TCHAR[100]; // 将new TCHAR[100]的一个地址给filename ,比如0x00002
// filename=filenamecs.GetBuffer(filenamecs.GetLength()); // 这句话错了,因为把filename 的地址该了,可能改成了0xA0002
memcpy(filename,filenamecs.GetBuffer(filenamecs.GetLength()),filenamecs.GetLength()) ; //应该要用这句话,不能改filename 的地址
delete []filename; // 如果你把filename 地址改成了filenamecs.GetBuffe返出来的地址,现在你去delete他的内容,当然错了
youlitai0116 2008-06-09
  • 打赏
  • 举报
回复
谢谢 大家 结贴给分!
fhb13 2008-06-09
  • 打赏
  • 举报
回复
绝对没错!
雨过白鹭洲 2008-06-09
  • 打赏
  • 举报
回复
问问MS VS 2005。。
youlitai0116 2008-06-09
  • 打赏
  • 举报
回复
我调试的时候就是 在delete []filename; 这里出错。
把整段代码都贴上来,大家帮忙看看;
是用vs2005 mfc ,实现选一个文本文件,ondakai函数把它复制到指定的文件夹c:\\TextRO\\下

void ClujingView::Ondakai()
{
CFileDialog myDlg(TRUE, NULL, NULL, 0, _T("txt|*.txt||"));
myDlg.DoModal();

CString filenamecs = myDlg.GetFileName();
TCHAR* filename = new TCHAR[100];
filename=filenamecs.GetBuffer(filenamecs.GetLength());


TCHAR szNewPath[MAX_PATH];
TCHAR szDirPath[] = TEXT("c:\\TextRO\\");
CreateDirectory(szDirPath, NULL);
lstrcpy(szNewPath,szDirPath);
lstrcat(szNewPath,filename);


DWORD dwAttrs;
CopyFile(filename,szNewPath,FALSE);
dwAttrs = GetFileAttributes(filename);
SetFileAttributes(szNewPath, dwAttrs | FILE_ATTRIBUTE_READONLY);

filenamecs.ReleaseBuffer();
delete []filename;
filename= NULL;

//Invalidate();
}
fallenbluefire 2008-06-09
  • 打赏
  • 举报
回复
你可以搜索一下你的程序里有几个delete有几个new,
如果你找出来8个delete,7个new那么恭喜你你写错了
如果你找出来new和delete的数量相同
那么你看看带[]的new是不是都用带[]delete了,不带[]的new是不是都用不带[]delete了
要是这样都没错,你应该再看看有没有反复delete的指针,比如你把filename delete了100遍。
iu_81 2008-06-09
  • 打赏
  • 举报
回复
没有问题
别的地方的问题吧
kkndciapp 2008-06-09
  • 打赏
  • 举报
回复
对的
fibbery 2008-06-09
  • 打赏
  • 举报
回复
应该没有问题吧!
shtianhai 2008-06-09
  • 打赏
  • 举报
回复
提供参考,在VC6.0下
void main()
{
char* filename = new char[100];


delete []filename;
filename= NULL;
}

没有错误!
jzzlo 2008-06-09
  • 打赏
  • 举报
回复
帮顶

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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