FreeでNewを解放したらどうなるの?

972 ワード

C言語のfree関数でC++のnew演算子で割り当てられたメモリを解放すると、何が起こるのでしょうか.実験を始める.
テストコード
#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