FreeでNewを解放したらどうなるの?
972 ワード
C言語のfree関数でC++のnew演算子で割り当てられたメモリを解放すると、何が起こるのでしょうか.実験を始める.
テストコード
じっけんけっか
じっけんけってい
単純なデータ型(int[])では、newを使用してメモリを割り当てた後、freeを使用して上記の解放されたメモリを解放できます.効果はdeleteと同じです.複雑なデータ型(クラスポインタなど)では、freeはdeleteとは異なり、クラスの構造関数は実行されません.
原因分析
参照http://www.cppblog.com/Lee/archive/2009/03/09/75990.html
テストコード
#include
#define FREE_MEMORY
int main()
{
int * pInt = new int[5];
for ( int i = 0; i != 5; i++ )
{
pInt[i] = i;
std::cout << pInt[i] << " ";
}
std::cout << std::endl;
#ifdef FREE_MEMORY
std::cout << "Now Free..." << std::endl;
free(pInt);
#else
std::cout << "Now Delete..." << std::endl;
delete [] pInt;
#endif
for ( int i = 0; i != 5; i++ )
{
std::cout << pInt[i] << " ";
}
std::cout << std::endl;
system("pause");
return 0;
}
じっけんけっか
じっけんけってい
単純なデータ型(int[])では、newを使用してメモリを割り当てた後、freeを使用して上記の解放されたメモリを解放できます.効果はdeleteと同じです.複雑なデータ型(クラスポインタなど)では、freeはdeleteとは異なり、クラスの構造関数は実行されません.
原因分析
参照http://www.cppblog.com/Lee/archive/2009/03/09/75990.html