释放指向stack上的空间会产生什么样的后果?

一个很简单但是可能忽视的问题,请看下面的C/C++代码

#include<iostream>
using namespace std;

void main()
{
    
int x=1;
    
int *p=&x;
    free(p);
}

问这段程序可以正常运行吗?

答案是throw如下的exception

跟踪到汇编代码,可以看到throw exception之前的一段大致如下的指令:

00408C5C   call        _CrtIsValidHeapPointer (004096c0)

这条函数的大致作用是检查对应的memaddress是否为有效的heap区域。若否,则产生一个中断,然后调用该指令的free抛出一个exception。

原文地址:https://www.cnblogs.com/Winston/p/1333655.html