三种方法中,递归最为简单,栈次之,循环最为麻烦。递归的深度如果太大则会导致栈溢出;栈的方式需要额外的辅助空间;循环编程最麻烦。
首先是递归:
//递归方法
void midPrint_r(TreeNode* root)
{//中序遍历
if(root==NULL)
return;
if(root->left)
midPrint(root->left);
c...
分类:
其他好文 时间:
2015-06-21 10:39:45
阅读次数:
109
在上节我们介绍了Trampoline。它主要是为了解决堆栈溢出(StackOverflow)错误而设计的。Trampoline类型是一种数据结构,它的设计思路是以heap换stack:对应传统递归算法运行时在堆栈上寄存程序状态,用Trampoline进行递归算法时程序状态是保存在Trampoli.....
分类:
其他好文 时间:
2015-06-18 19:17:56
阅读次数:
135
今天在写程序的时候,弹出这样的提示对话框:应用程序发生异常 unknown software exception (0xc00000fd):相关代码是这样,在一个函数中读取一个csv文件,先根据这个csv文件的大小,直接初始化一个变量,然后一次把整个文件读取并赋值给这个变量。一开始测试时使用的一般都...
分类:
其他好文 时间:
2015-06-18 10:59:22
阅读次数:
92
这是CSAPP官网上的著名实验,通过注入汇编代码实现堆栈溢出攻击。实验材料可到我的github仓库 https://github.com/Cheukyin/CSAPP-LAB/ 选择buffer-overflow分支下载 linux默认开启ASLR,每次加载程序,变量地址都会不一样,所以若要关...
分类:
移动开发 时间:
2015-06-12 20:37:41
阅读次数:
219
面对这个栈溢出这个重灾区,Windows在VS 7.0(Visual Studio 2003)及以后版本的Visual Studio中默认启动了一个安全编译选项——GS(针对缓冲区溢出时覆盖函数返回地址这一特征),来增加栈溢出的难度。(GS Break----配置属性----c/c++----代码生...
最近由雅和提出的堆栈溢出问题引起了我兴趣:怎么确保Java 8 编译时,一个方法签名实现了函数式接口。这个是一个好问题。我们假设下面的定义:@FunctionalInterface
interface LongHasher {
int hash(long x);
}这个类型强加了一个清晰的约定。实现类必须提供一个单独的hash方法 ,传一个长整型参数,返回一个整型值。当使用lambdas或方...
分类:
其他好文 时间:
2015-06-03 15:49:09
阅读次数:
118
从研究底层和汇编以来,已经多次接触到“栈溢出”这个名词了。这次在汇编码中看到了个不明就里的 ___security_cookie ,查了下,原来是编译器的安全检查机制。转载一篇文章:首先,security cookie并不是windows系统自带的保护机制,并不是说一个确实存在溢出漏洞的程序,放到带...
分类:
其他好文 时间:
2015-06-03 15:31:24
阅读次数:
132
运行mvn eclipse:eclipse时,经常会出现因为maven项目过大,导致内存不足java栈溢出的error,需要更改MAVEN启动内存http://stackoverflow.com/questions/2819853/setting-java-heap-space-under-mave...
分类:
其他好文 时间:
2015-06-03 11:38:56
阅读次数:
138
记录一个简单的栈溢出的实例,具体的分析以后加进去。 程序源代码buffer.c: #include #include void fun1(char *input) { char buffer[10]; strcpy(buffer,input); printf("Call fun1,buffer=%s...
分类:
其他好文 时间:
2015-06-03 11:37:55
阅读次数:
93
1.进程使用的内存都可以按功能大致分为以下4个部分:(1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。(2)数据区:用于存储全局变量等。(3)堆区:进程可以在堆区动态地请求一定大小的内存,并在用完之后还给堆区。动态分配和回收是堆区的特点。(4)栈区:用于动态地存储...
分类:
其他好文 时间:
2015-05-29 00:40:42
阅读次数:
175