释放指向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。

 

posted on 2008-11-14 15:57  飞天舞者  阅读(248)  评论(0编辑  收藏  举报

导航

For more information about me, feel free email to me winston.he@hotmail.com