易截截图软件、单文件、免安装、纯绿色、仅160KB

关于delete C/C++ 指针

栈:函数调用的时候,在栈中保存局部变量和函数参数等。当函数返回时,自动清除栈。
自由存储区:也称为堆(heap),可以看作大量的内存段。通过 new 操作符分配的内存在堆中。程序结束之前不自动清除自由存储区。需要由程序来负责释放(delete)。
1.
对指向栈上内存的指针调用delete会导致程序Crash。
2. 
new 进行自由存储区中内存分配。
如果 new 不能在自由存储区中创建内存,则会返回 NULL指针。每次分配新内存时一定要检查指针是否为 null.
delete 操作实际上是恢复指针所指的内存,使之可以再用,而不至于造成内存泄漏(memory leak).
而指针仍然是指针,必要时还可以重新赋值。
如果对已经释放过的指针调用 delete 操作,会导致程序崩溃。当删除指针时,给指针赋值 NULL(0), 对空指针调用 delete 是安全的。
内存泄漏:一种情况是程序在未释放它指向的内存之前就给指针重新赋值。
当程序对自由存储区中的对象指针调用 delete 时,在释放内存之前会自动调用对象的析构函数。这个策略给类提供了清理的机会。
3.
对于Symbian应用程序,如果先delete了一个指针指向的内存,但没有把这个指针赋值为NULL,然后在某处发生了Leave, 清除栈弹出指针并再次delete这段内存,这就造成了多次delete一段内存,当第二次delete这段内存时,应用程序会Crash(程序终止),Crash 原因可能是:这段内存已经分配作为其它用处,删除这段还需要用的内存空间,从而导致Crash。


相关文档:

红外接收(nec)稳定程序 c文件

 /* =========================================================================== */
/* Project:        s3c44b0_lib                         & ......

C函数返回结构体在汇编下的实现

原文链接:http://blog.csdn.net/sytstarac/archive/2009/08/05/4411519.aspx
编译器:vc++6.0(因为此种实现依赖编译器处理)
此处只简要叙述一下机制。并附部分关键指令序列。
准备:
1,关于EBP:称做栈基址指针。为什么这样说呢?我们先来看看函数调用的过程:
参数从右到左压栈。
call指令执行,该指令将导致EIP压 ......

C函数返回结构体在汇编下的实现

 
编译器:vc++6.0(因为此种实现依赖编译器处理)
此处只简要叙述一下机制。并附部分关键指令序列。
准备:
1,关于EBP:称做栈基址指针。为什么这样说呢?我们先来看看函数调用的过程:
参数从右到左压栈。
call指令执行,该指令将导致EIP压栈。
每个函数前两句必定是:push ebp   mov ebp,esp。则ca ......

C/C++程序员两年历程 (1)

  不知不觉已经工作两年了,辞去了原来的工作,又跑回了我上学的地方。今天跑去一家室友介绍的公司面试。问得问题挺简单,但我答的却真不怎么地啊。回来又研究了一下,发现这些问题我应该都理解啊,怎么到别人问起的时候就全忘了一般呢。想想了发现还是学的不到位。不禁又想起了这么多年来,我都学到了什么东西呢。
& ......

Visual Studio 2008 下生成C/C++ 汇编代码

在项目属性页 --> 配置属性 --> C/C++ --> 输出文件里面,将汇编输出的下拉列表从无列表选择为你需要汇编输出的内容,比如“仅列出程序集(/FA)”,如图1-1,图1-2:
 
图1-1
 
图1-2
------------------------------------------------------------------------------------------------ ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号