易截截图软件、单文件、免安装、纯绿色、仅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。


相关文档:

c头文件最后要加一个空行,知道为什么嘛?

 以前学生时代的时候就有遇到过这个问题,不过没去深究;
现在也是老问题,其实很简单,就是为了防止#include两个头文件的时候,把第一个头文件的最后一行和 第二个头文件的第一行拼接成一行;呵呵,其实很多问题都很简单,而且很隐蔽,只是我们很多时候没去注意! ......

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

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

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

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

c学习第一天

n 用标识符代表一个常量,称为符号常量。 n 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。 n 使用符号常量的好处是: Ø 含义清楚; Ø 能做到“一改全改”。 --话说:不知道c里面有没有全局变量的东东,有的话,这两个的实际用处有啥子区别呢?看看再说 数据结构+算法=程序 终于知道这 ......

求教高手 关于C播放wav问题


最近在网上查了好多关于C播放wav这方面的资料,调试半天也没有结果,搜到一个编译好的EXE文件能播放,没有源代码,反汇编不了,谁能指点一下。。。。。以下两种代码段:
 #include <stdio.h>
#include <dos.h>
/* wav文件结构 */
typedef struct WaveData
{
   unsigned long sample_le ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号