04-常见内存错误以及valgrind使用
代码段:
只读数据,因此对这一部分的数据,试图写只读数据,这个在编译的时候基本上可以检测。
数据段/BSS段:
未初始化直接访问,即使没有显示初始化,仍然会初始化为0
栈空间数据:
(1)局部变量,未初始化变量会给随机的初值,出现异常情况更诡异
(2)栈溢出:在栈中申请过大的局部变量
堆空间数据
内...
分类:
其他好文 时间:
2014-09-28 18:41:43
阅读次数:
350
记忆搜索总是一个快速的方法(这里假设测试用例中s1和s2的长度都不超过(2^16) - 1), 当然用记忆搜索的,往往就可以写成DP的形式的,不用担心大数据时栈溢出了#include #include #include #include #include using namespace std;cl...
分类:
其他好文 时间:
2014-09-16 20:23:41
阅读次数:
247
与普通递归相比,由于尾递归的调用处于方法的最后,因此方法之前所积累下的各种状态对于递归调用结果已经没有任何意义,因此完全可以把本次方法中留在堆栈中的数据完全清除,把空间让给最后的递归调用。这样的优化便使得递归不会在调用堆栈上产生堆积,意味着即时是“无限”递归也不会让堆栈溢出。这便是尾递归的优势。有些...
分类:
其他好文 时间:
2014-09-13 21:17:45
阅读次数:
262
堆溢出的利用难度比栈溢出利用要复杂的多,每个不同的漏洞可能综合利用不同的技术。堆溢出漏洞的根源也是没有正确的使用非安全函数(这里是微软禁用的非安全函数)
无数次遭受堆栈溢出折磨,随着系统变得复杂,故障点越来越难以查找!主要溢出情况如下:1,一般RAM最后两块空间是堆Heap和栈Stack,堆从下往上用,栈从上往下用,任意一个用完,都会进入对方的空间2,如果栈用完,进入堆的空间,这个时候系统是不会有任何异常的,也就是说,栈底没有什么意义。除非堆和栈指针...
分类:
其他好文 时间:
2014-09-07 23:46:55
阅读次数:
288
1,什么是栈溢出?由于栈一般默觉得1-2m,一旦出现死循环或者是大量的递归调用,在不断的压栈过程中,造成栈容量超过1m而导致溢出。2,解决方式:方法一:用栈把递归转换成非递归通常,一个函数在调用还有一个函数之前,要作例如以下的事情:a)将实在參数,返回地址等信息传递给被调用函数保存; b)为被调用函...
分类:
其他好文 时间:
2014-09-07 22:21:15
阅读次数:
208
题目说明:开启漏洞之旅,从基础做起。近日,下载了CMU为《深入理解计算机系统》(CSAPP)一书教学配合的缓冲区溢出实验BufferBomb,重温了栈溢出的原理。题目提供了一个有漏洞溢出的程序bufbomb,包括五个Level,在每个Level中要求返回指定的函数、修改全局变量、执行Shellcod..
分类:
移动开发 时间:
2014-09-06 18:47:44
阅读次数:
435
log4j-over-slf4j和slf4j-log4j12是跟java日志系统相关的两个jar包,当它们同时出现在classpath下时,就可能会引起堆栈溢出异常。
先大致梳理了一下现有Java日志体系接口,然后仔细分析了这种异常出现的原因,最后重现异常并展示了详细的调用过程。...
分类:
其他好文 时间:
2014-08-17 13:05:42
阅读次数:
467
快速排序是一种效率比较高的算法,算法的思想是取出待排序中的一个元素,想办法将小于他的元素交换到他的左边,大于他的元素交换于他的右侧,然后对左右两侧再分别递归进行上述过程,直到左右两侧的元素只有一个。从而实现了整体的排序。c++实现的代码如下:
//快速排序(递归)
template
void quick_sort(T *arr,int b,int e)
{
if(b<e)
{ ...
分类:
其他好文 时间:
2014-08-11 15:00:42
阅读次数:
210