//定义结构
typedef struct _info
{
  char name[20];
  char phone[20];
}INFO, *PINFO;INFO info1; //此时info1中的name,phone是在哪里分配的?
PINFO pinfo;
pinfo = new INFO;//此时pinfo中的name,phone是指哪里分配的?如果不delete pinfo,pinfo传递到任何地方,name,phone都存在?

解决方案 »

  1.   

    new出来的变量都是从堆里分配的。
      

  2.   

    INFO info1; //此时info1中的name,phone是在哪里分配的?
    ===========
    这是在栈里分配的,你可以不用管它,它自己会释放。pinfo = new INFO;//此时pinfo中的name,phone是指哪里分配的?如果不delete pinfo,pinfo传递到任何地方,name,phone都存在?
    ============
    这是堆里分配的,你用完之后要delete掉。不delete掉的话,它始终存在。
      

  3.   

    有关程序中变量的内存分配问题
    在程序调到内存中后:由低到高把内存分为:低------0系统占用区代码区全程数据区堆区栈区DLL区[有DLL自己的堆栈等]....没有占用区高-----4GB一个程序的运行起来后,其在内存中有5个区域
    1. 程序代码区
    这个很简单,代码要执行,肯定要加载进内存, 我们不必关心。2. 文字常量区
    一般我们这样定义一个字符串时,其是在文字常量区的:
    char* s1 = "hello, world";
    char* s2 = "hello, world";
    if(s1 == s2)
        printf("s1和s2指向同一个在文字常量区的字符串");这里, s1和s2指向的是同一个字符串3. 静态存储区
    全局变量,静态变量会放在这个区域,事实上,全局变量也是静态的。以上1,2,3三个区域的内存在程序起来的时候就开辟好了的。4. 栈
    局部变量就是在栈里的。另外,函数调用时的参数也是在栈里的,这个现在不必关心5. 堆
    malloc或new出来的内存就是在堆里的,需要程序员自己管理清除。申请、释放内存
      C语言 C++语言 Windows 平台 COM IMalloc 接口 BSTR 
    申请      malloc() new    GlobalAlloc()   CoTaskMemAlloc() Alloc()   SysAllocString() 
    重新申请  realloc()      GlobalReAlloc() CoTaskRealloc()  Realloc() SysReAllocString() 
    释放      free()   delete GlobalFree()    CoTaskMemFree()  Free()    SysFreeString() 
     
      

  4.   

    INFO info1;  PINFO pinfo;
    如果他们代码放在外部..则存放全局静态存储区。
    在函数内部存在stack区。new的malloc的都是heap区
      

  5.   


    new或者是malloc都是在堆中分配,用完之后必须要释放掉(delete )