双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

求助.....内存管理 new/delete ....

klmswt klmswt 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在c++程序中多次利用new来申请空间,为了防止内存泄漏,在结束时用delete来释放指针变量。
但是程序在执行到delete时出现debug错误: DAMAGE: after Normal Block(#x),不知原因何在?
如果不用delete 释放的话,程序执行几次之后将无法执行,估计是内存泄漏。

程序基本代码如下:
static void f1(int n)
{
unsigned short *p1, *p2;
p1 = new unsigned short[n];
memset(p1, 0 ,n*sizeof(unsigned short));
p2 = new unsigned short[n];
memset(p2, 0 ,n*sizeof(unsigned short));
...
...
f2(p1,p2,n);
...
..
delete []p2;
delete []p1;
}

static void f2(unsigned short *a, unsigned short *b, int n)
{

unsigned short *x, *y, *z;
x = new unsigned short[n/2];
memset(z, 0 ,n/2*sizeof(unsigned short));
y = new unsigned short[n/2];
memset(y, 0 ,n*sizeof(unsigned short));
z = new unsigned short[n/2];
memset(z, 0 ,n/2*sizeof(unsigned short));
...
...
delete []z;
delete []y;
delete []x;
}
...全文

相关推荐

C++中new/delete与new[]/delete[]的使用区别

编写代码,举例说明new/delete与new[]/delete[]在创建对象时申请内存,以及释放空间时的区别

firefly_2002

C++动态内存分配(new/new[]和delete/delete[])详解

主要介绍了C++动态内存分配(new/new[]和delete/delete[])详解的相关资料,需要的朋友可以参考下

weixin_38655990

C++内存管理详解,new,delete的合理使用

对应的new和delete要采用相同的形式    下面的语句有什么错? string *stringarray = new string[100]; ... delete stringarray; 一切好象都井然有序——一个new对应着一个delete——然而却隐藏着很大的错误:程序的运行情况将是不可猜测的。至少,stringarray指向的100个string对象中的99个不会被正确地摧毁,因为他们的析构函数永远不会被调用。

coyida

深入理解C++中的new/delete和malloc/free动态内存管理及区别介绍

malloc/free和new/delete的区别 malloc/free是C/C++标准库的函数;new/delete是C++操作符。 malloc/free只是动态分配内存空间/释放空间;new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理资源。 malloc/free需要手动计算类型大小且返回值类型为void*;new/delete可自动计算类型的大小,返回对应类型的指针。 malloc/free管理内存失败会返回0;new/delete等的方式管理内存失败会抛出异常。 在C++ Primer书中有提到说: new/delete的表达式与标准库函数同

weixin_38514660

定制new / delete的性能分析

定制new / delete的性能分析

wzhou1974
评论 13
收藏 已收藏
分享
返回顶部
klmswt
C++ 语言 65,214 成员 250,514 内容