您的位置:首页 > 编程语言 > C语言/C++

C++内存使用

2015-01-01 19:45 253 查看
一.动态数组的申请

错误代码:

#include<iostream>

using namespace std;

int main()

{

int i;

int *p=new int(12);

for(i=0;i<12;++i)

p[i]=i;

delete []p;

return 0;

}

产生运行时错误。Message可能如下: glibc detected *** free(): invalid next size (fast)

int *ip=new int(12)代表用12来初始化ip所指定的内存的变量值。

正确代码

#include<iostream>

using namespace std;

int main()

{

int i;

int *p=new int[12];

for(i=0;i<12;++i)

p[i]=i;

delete []p;

return 0;

}

二.不成对的new与delete

#include<iostream>

using namespace std;

int main()

{

int *p=new int[10];

int *q=new int[2];

delete p;

delete q;

return 0;

}

其实对于基本类型如char int等,delete还是delete []是一样的,都能够释放掉内存。 但是对于自定义的类,比如 string *str = new string[10],用delete str和delete [] str的区别是delete str只对str[0]调用了析构函数,而delete []str则对str数组里的每个元素都调用了析构函数

三.函数中途退出忘记释放内存

void func(char* in, int inlen)

{

char *p = new char[20];

if ( inlen < 20 ) { return 0; }

strncpy(p, 20, in);

... delete [] p; r

eturn 1;

}

正确代码:

若inlen<20,则函数中途退出,而未释放内存,导致内存泄露。

在程序退出前添加释放内存语句 delete [] p;

if ( inlen < 20 )

{

delete [] p;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: