如:
extern void* p;if (isstack(p))
{
  ...
}or (isheap(p))
{
  ...
}是否有形如的isstack或者isheap的函数

解决方案 »

  1.   

    执行了new操作的指针对象和数组指针一般都是分配在堆上了。
    而形如:char buf[1024]的静态数组和类的对象(例如CColorDialog dlg的dlg)是分配到栈上的。
      

  2.   

    可以根据指针的声明判断,用new声明的就是指向堆(heap),其他的声明应该是指向栈stack)上的.
      

  3.   

    study。
    每个进程中的分配的栈空间和堆空间是不是有固定的起始地址啊?
      

  4.   

    如果不考虑移植性,方法是存在的。前提:
    1、在大多数系统中,堆栈和堆对应的内存是连在一起的。栈在高地址,堆在地址。堆栈是从高地址向低地址移动,堆是从低地址向高地址递增。而且堆位于栈的下方。
    2、堆栈是后进先出,也就是说最后进栈的变量的地址肯定是堆栈中所有变量地址中的最小值。理解这一点很关键。
    3、局部变量是在堆栈中存放的,而不是堆。如果理解了上述说明,看下面的代码:BOOL IsInHeap(const void * pObj)
    {
        int n;
        if ( pObj < &n )
        {
            return TRUE;
        }
        return FALSE;
    }有一个例外,对于全局变量和静态变量,由于存放在Data段,所以没有办法通过这种方式判断