为什么释放内存会出错?/?!!代码如下: 你的nSize太小了,写内存时超界造成内存损坏 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 编写程序时,最好不要出现 ptr1 = ptr2= new char[nSize]; 这样的指针赋值语句,好好检查一下。 应该这样写delete []ptr2; 你delete 的是一个 数组指针 所以要加上 [ ] 符号 应该这样写 delete []ptr2; 就对了 我将delete ptr2改成 delete []ptr2,依然出错!错误信息是什么意思? 你前面是用什么申请的内存;你的ptr1,ptr2是不是这样定义的char *prt1,*ptr2;还是char ptr1[NZISE],ptr2[NSIZE]; 你调用delete[] ptr2 ;会施放nSize 大小的内存,所以会出错,for(int i = 0;i<nsize - strlen(data);i++){char * p = ptr2++; delete p; }试试。 strncpy不是那么用的。你的用法和strcpy有任何区别吗?应该是strncpy(dest,destsize,src); To fz_zhou(vcfan):是这样定义的 char *prt1,*ptr2;To mahongxi(烤鸡翅膀)我式一下! 施放nSize 大小的内存 是什么意思? 我觉得"施放nSize 大小的内存"是将以ptr为首,nszie大小的内存标为可用区域,这样再NEW时,这一部分可能会被使用。 救救我拉,一直以来,想用rational rose ,好不容易下载了一个,却没帐户和密码,用不了,真烦躁,哪位兄弟能帮帮我啊? Kevin_qing说得对,应该是由于访问越界造成的。 同意 Kevin_qing() ,在这个函数中strlen(data)>nSize,所以函数strncpy使用指针ptr1访问越界,就是访问了ptr1+nSize+??(打两个问号是因为不知道到底越界多少)的内存,于是,当你删除的时候出错了.你可以先比较一下,这样ASSERT(nSize>strlen(data)); liu_feng_fly to xwzqqd我正好有一个crack 程序,你把email留下来。to fljfly (冷血)呵呵,不好意思在你的问题里写这个,确实找不着他的email。 编写程序时,最好不要出现1. ptr1 = ptr2= new char[nSize]; 这样的指针赋值语句;2. 在用strncpy OR strcpy 之前要检查目标缓冲是否有足够的空间。上面出错是因为越界造成 对,把 strlen 换成 nSize 就对了。 至于数组的 delete ,因为是简单类型, 不用 [] 也可以完全释放。 ptr! += strlen(data) 是要做什么?至于delete时要不要 加 [] 是无所谓的。 1。是编译时出的问题吗?2.我记得strncpy的原型是:strncpy(char* dest,char* src,int number); 你先看一下是不是这里的问题。通常编译器报错的地点和你代码出错的地点不一致。3。是这样定义的 char *prt1,*ptr2;所分配的内存大小不够, 在释放整块内存时可能导致越界, NowCan(能量、激情、雨水、彩虹——雷雨云) ( ) :说的对. 谢谢大家了,是Kevin_qing说的那样,内存写越界了!! vc的反汇编功能大家应该可以学学,就可以easy解决这些问题了。 怎么向CListView中动态插入项? 急!!VC oracal多张图片存取问题 VC板块好人多,请教:使用WinCVS checkout时, 如何通过命令行方式导出Checkout日志. 查过手册搜过google未果 ,申时结贴 谢谢。 itmaster请进 已经完成,谢谢winphoenix 一个愚蠢的问题! 纠结的画图问题 紧急问题,有什么方法可以把BSTR类型转化成float???? CWinApp的对象是什么类型? 菜鸟感觉很棘手的内存报错,请大神帮忙 请问怎么样把口令验证屏蔽? 请教对话框的标题条问题!
delete []ptr2;
delete []ptr2; 就对了
错误信息是什么意思?
你的ptr1,ptr2是不是这样定义的
char *prt1,*ptr2;
还是char ptr1[NZISE],ptr2[NSIZE];
for(int i = 0;i<nsize - strlen(data);i++)
{char * p = ptr2++;
delete p;
}
试试。
你的用法和strcpy有任何区别吗?应该是strncpy(dest,destsize,src);
是这样定义的 char *prt1,*ptr2;
To mahongxi(烤鸡翅膀)
我式一下!
是将以ptr为首,nszie大小的内存标为可用区域,这样再NEW时,这一部分可能会被使用。
你可以先比较一下,这样
ASSERT(nSize>strlen(data));
liu_feng_fly
我正好有一个crack 程序,你把email留下来。to fljfly (冷血)
呵呵,不好意思在你的问题里写这个,确实找不着他的email。
1. ptr1 = ptr2= new char[nSize]; 这样的指针赋值语句;
2. 在用strncpy OR strcpy 之前要检查目标缓冲是否有足够的空间。上面出错是因为越界造成
至于delete时要不要 加 [] 是无所谓的。
2.我记得strncpy的原型是:strncpy(char* dest,char* src,int number);
你先看一下是不是这里的问题。通常编译器报错的地点和你代码出错的地点不一致。
3。是这样定义的 char *prt1,*ptr2;所分配的内存大小不够, 在释放整块内存时可能导致越界,