○メモリの解放
ヒープ領域に作成された変数(newにより作成された変数)は手動(delete)で開放する必要があります
開放しないとメモリリークを引き起こします。
test*a=new test();
delete a; //開放
test*b=new test[100];
delete [] b; //配列の開放
■自動変数(newしていない)のためメモリリークしない例
{}を抜けた時点でオブジェクトがなくなります。
#include <stdio.h>
class test{
public :
int i;
};
int main(){
while(1){
test a();
test b[10];
}
return 0;
}
■newによりメモリリークを起こす例
testクラスをnewすることによってメモリが確保されていきます
#include <stdio.h>
class test{
public :
int i;
};
int main(){
test*a;
while(1){
a=new test();
}
return 0;
}
■上の修正版
newされたtestクラスをdeleteにて開放しています
#include <stdio.h>
class test{
public :
int i;
};
int main(){
test*a;
while(1){
a=new test();
delete a;
}
return 0;
}
■newによりメモリリークを起こす例
testクラス配列をnewすることによってメモリが確保されていきます
#include <stdio.h>
class test{
public :
int i;
};
int main(){
test*a;
while(1){
a=new test[10];
}
return 0;
}
■上の修正版
newされたtestクラス配列をdelete [] にて開放しています
#include <stdio.h>
class test{
public :
int i;
};
int main(){
test*a;
while(1){
a=new test[10];
delete [] a;
}
return 0;
}
■newによりメモリリークを起こす例
char配列をnewすることによってメモリが確保されていきます
#include <stdio.h>
int main(){
while(1){
char*a;
a=new char[10];
}
return 0;
}
■上の修正版
newされたchar配列をdelete [] にて開放しています
#include <stdio.h>
int main(){
while(1){
char*a;
a=new char[10];
delete [] a;
}
return 0;
}
▲トップページ
>
Windows と C++