void main()
{
    char *szBuf = new char[100];
    return;
}
比如这个生成的Test.exe
1 我没有delete []szBuf,Test.exe退出的时候,系统会自动释放szBuf吗?
2 哪种exe退出时new的东西系统会释放,哪种exe退出时new的东西系统不会释放?

解决方案 »

  1.   


    void main()
    {
        CreateProcess()//进程1中new: char *szBuf = new char[100];
        CreateProcess()//进程2
        return;
    }还有1个问题,就是上面的进程2可以delete进程1中new的szBuf吗?
      

  2.   

    进程在用户模式下分配的内存在进程结束(包括异常终止)的时候都会自动释放,没有不释放的情况。
    new分配的内存只能在本进程中delete。
      

  3.   

    exe退出后这个进程的地址空间会被释放,包括子进程;
    2个进程的进程堆是不同的地址空间,应该不能在不同地方delete...
      

  4.   

      我觉得最好能够自己释放 程序比较多的话 可能会有问题的跨进程不能delete
      

  5.   

    进程退出了,还不释放 ,你调试几次程序,windows不是崩溃了?!!!
      

  6.   

    不要依赖OS的内存管理来最后释放内存,虽然只是可行的。
    养成不释放内存的习惯,容易在改释放内存的时候忘了释放,从而造成内存泄露。
    每个进程会有自己的2GB虚拟地址空间(win32默认),自己只能操作自己空间里的内存,无法碰到别的进程的内存。除非使用特定的API函数,如WriteProcessMemoryEx等。
    因此,多进程的架构在安全保护可靠性上,要比多线程架构要好。但是开销会更大。