C/C++ で動的に作成されたメモリのブロックを解放しようとしています。
しかし、私が使用した標準的な方法 (malloc/free と new/delete) はどちらも機能不全のようです。
以下に示す両方のコードの o/p は似ています。
malloc/free を使用したコードは次のとおりです。
#include<stdio.h>
#include<stdlib.h>
int main(){
int * arr;
arr = (int *)malloc(10*sizeof(int)); // allocating memory
int i;
for(i=0;i<10;i++)
arr[i] = i;
for(i=0;i<10;i++)
printf("%d ",arr[i]);
printf("\n");
free(arr); // deallocating
for(i=0;i<10;i++)
printf("%d ",arr[i]);
printf("\n");
}
new/delete[] を使用したコードは次のとおりです。
#include<stdio.h>
#include<stdlib.h>
int main(){
int * arr;
arr = new int[10]; // allocating memory
for(int i=0;i<10;i++)
arr[i] = i;
for(int i=0;i<10;i++)
printf("%d ",arr[i]);
printf("\n");
delete[] arr; // deallocating
for(int i=0;i<10;i++)
printf("%d ",arr[i]);
printf("\n");
}
ただし、メモリの割り当てを解除した後でも、エラーは発生しません。
両方のケースの o/p は同じです:
0 1 2 3 4 5 6 7 8 9
0 0 2 3 4 5 6 7 8 9
では、C/C++ でメモリの割り当てを解除する正しい方法は何ですか? また、メモリの割り当てを解除した後でも配列が出力されるのはなぜですか?