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;
}
错误代码:
#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;
}
相关文章推荐
- c++的意义。。(个人感觉使用c++可以接触到软件的本质,虽然不能直接开发快速但你可以有自由的感觉,尤其是指针,和直接贴近内存的本质)
- C++对象模型之内存区的使用
- C++中使用内存映射文件处理大文件
- [C++]VS2008使用命令行选项查看对象的内存布局
- C++中使用内存映射文件处理大文件
- C++内存使用小结
- linux c c++内存检查工具valgrind的使用
- C++备忘 STL释放内存 ,weka使用备忘
- C++对象内存布局--虚基类表的使用
- C++中使用内存映射文件存取struct,并用指针访问
- [收藏]使用Microsoft Visual C++来检测和隔离内存泄漏
- 使用 CL 编译器选项查看 C++ 类内存布局
- C++中使用内存映射文件处理大文件
- C++ 静态内存 栈 堆的功能和使用方式
- C++使用技巧,内存越界保护
- C++对象模型之内存区的使用
- c++ 基类、派生类都使用了动态内存分配的实例
- C++对象对内存的使用
- C++中vectors内存分配的使用方法
- C/C++程序的内存分配与使用笔记