我正在尝试在 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++ 中释放内存的正确方法是什么?另外,为什么即使在释放内存后数组也会被打印?