C++メモリ管理と注意事項
1680 ワード
メモリは、オペレーティングシステムによって割り当てられ、管理されるプログラムの実行に不可欠なリソースです.プログラマーとして、私たちは通常申請と返却しかできません.本文は主にC++メモリの申請と解放(返却)と注意事項を紹介する.
1メモリを要求および解放する演算子
申請new
リリースdelete
2メソッド
申請メモリ:
メモリを解放:
ブロックメモリの申請と解放:
3注意事項
3.1セット使用
c言語でのメモリの申請と解放はmallocとfreeが完了したことを知っています.
しかしC++ではnewとdeleteが使われています.C言語で申請する場合は、C言語で釈放しなければなりません.C++で申請するには、C++で釈放しなければなりません.組み合わせて使う.コンパイルできません.
3.2メモリは申請に失敗する可能性があり、異常処理が必要である
3.3メモリを解放するにはポインタを空にする必要がある
メモリを解放するだけでなく、ポインタを空にしなければなりません.ポインタが以前のメモリを指している場合、delete[]pが誤って実行された場合.操作すると、同じメモリが2回繰り返し回収され、重大なエラーが発生します.
4 Demo
1メモリを要求および解放する演算子
申請new
リリースdelete
2メソッド
申請メモリ:
int *p = new int;
// , new
メモリを解放:
delete p;
ブロックメモリの申請と解放:
//
int *arr = new int[10];
//
delete []arr;
3注意事項
3.1セット使用
c言語でのメモリの申請と解放はmallocとfreeが完了したことを知っています.
//
void *malloc(size_t size);
//
void free(void *memblock);
しかしC++ではnewとdeleteが使われています.C言語で申請する場合は、C言語で釈放しなければなりません.C++で申請するには、C++で釈放しなければなりません.組み合わせて使う.コンパイルできません.
3.2メモリは申請に失敗する可能性があり、異常処理が必要である
int *p = new int[1000];
if (NULL == p)
{
//
}
3.3メモリを解放するにはポインタを空にする必要がある
int *p = new int[1000];
if (NULL == p)
{
//
//
}
delete []p; //
p = NULL;
メモリを解放するだけでなく、ポインタを空にしなければなりません.ポインタが以前のメモリを指している場合、delete[]pが誤って実行された場合.操作すると、同じメモリが2回繰り返し回収され、重大なエラーが発生します.
4 Demo
#include
#include
using namespace std;
int main(void)
{
// 100 char
char *str = new char[100];
// Hello C++
strcpy(str, "Hello C++");
//
cout << str << endl;
//
delete []str;
str = NULL;
return 0;
}