本文介绍了我们如何能够重新分配存储器后访问指针?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

按我的理解,

免费()来释放我们之前分配使用malloc内存。

在我下面的代码片段,我释放我已经分配的内存。但我可以释放,即使后访问指针?它是如何可能的?

如何免费内部工作?

 #包括LT&;&iostream的GT;
使用命名空间std;诠释的main()
{
   为int * p =(INT *)malloc的(的sizeof(INT));
   * p = 17;
   自由(对);
   * p值= * P + 1;
   的printf(\\ n释放内存::%天后,* P);
   返回0;
}


解决方案

您当然可以继续使用 P 呼叫后免费(P)并没有什么会阻止你。然而,结果将完全不确定的和未predictable。它的工作原理只是运气。这就是所谓的在许多节目作品后免费 。

相当不错

As per my understanding,

free() is used to deallocate the memory that we allocated using malloc before.

In my following snippet, I have freed the memory i have allocated. But i was able to access the pointer even after freeing? How it is possible?

How free works internally?

#include<iostream>
using namespace std;

int main()
{
   int *p=(int *)malloc(sizeof(int));
   *p=17;
   free(p);
   *p=*p+1;
   printf("\n After freeing memory :: %d ",*p );
   return 0;
}
解决方案

You can certainly continue to use p after calling free(p) and nothing will stop you. However the results will be completely undefined and unpredictable. It works by luck only. This is a common programming error called "use after free" which works in many programs for literally years without "problems" -- until it causes a problem.

There are tools which are quite good at finding such errors, such as Valgrind.

这篇关于我们如何能够重新分配存储器后访问指针?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 08:26