社区
C++ 语言
帖子详情
new 与delete 的问题
youlitai0116
2008-06-09 11:27:48
TCHAR* filename = new TCHAR[100];
………………
delete []filename;
filename= NULL;
这个有问题吗? 怎么会出现堆内存被破坏的情况,我的是vs2005,不会是编译器的原因吧 。
本人新手,别笑话啊!
...全文
78
11
打赏
收藏
new 与delete 的问题
TCHAR* filename = new TCHAR[100]; ……………… delete []filename; filename= NULL; 这个有问题吗? 怎么会出现堆内存被破坏的情况,我的是vs2005,不会是编译器的原因吧 。 本人新手,别笑话啊!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
帮顶
C++中
new
与
delete
问题
学习
C++中
new
与
delete
问题
学习 一.
new
char与
delete
问题
1.
问题
程序 [cpp] view plaincopy #include using namespace std; void main() { char* des =
new
char()
Vector的
new
与
delete
问题
先看一段代码: struct A; vector A_vect(5); for(int i = 0; i { A* pA =
new
A; A_vect.pus
C++
new
与
delete
的使用
C++的
new
与
delete
1.
new
的运算符用法(关键字) 2.
new
的函数用法 3.定位
new
4.
new
创建对象 5.
delete
6.对于内置类型
new
/
delete
/malloc/free可以混用 7.使用注意事项
new
与
delete
C++
首先我们来看一下
new
和
delete
。 1)在C++中堆内存的分配和释放是通过
new
和
delete
来操作的,
new
的底层也是通过malloc来开辟内存的,
new
比malloc多一项功能,就是开辟完内存,还可以进行初始化操作,如下: int *p =
new
int(10); 上面是
new
的基本操作,10代表堆上开辟的整形内存的初始值;如果是自定义类类型的话,如下: Test *p = ne...
new
和
delete
的用法完美解析
c++中
new
和
delete
的使用方法http://www.jb51.net/article/49537.htm对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个
问题
。
new
和
delete
运算符是用于动态分配和撤销内存的运算符...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章