返回信息流☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Sun May 22 17:30:41 2011) 提到:
问了个栈溢出的可能原因,至少举3个。(这个栈是内存的栈)
我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放
第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算?
请童鞋们补充。
☆─────────────────────────────────────☆
jkice (Bamboo) 于 (Sun May 22 19:11:35 2011) 提到:
关注一下,只写了前两个。。。
☆─────────────────────────────────────☆
XIEMENG00 (莫北) 于 (Sun May 22 19:21:48 2011) 提到:
记得有个在栈上动态分配内存的函数 alloca() 这玩意应该也能导致栈溢出
【 在 salooloo 的大作中提到: 】
: 问了个栈溢出的可能原因,至少举3个。
: 我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放
: 第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算?
: ...................
☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Sun May 22 19:31:21 2011) 提到:
还有木有?
☆─────────────────────────────────────☆
ghxcst (西门吹风) 于 (Sun May 22 20:44:01 2011) 提到:
ebp寄存器被覆盖?
我写的答案跟lz差不多
☆─────────────────────────────────────☆
rebirthatsix (茫犭者-算法盲) 于 (Sun May 22 20:44:17 2011) 提到:
对栈上的数组或者指针进行越界读写
使用与函数定义时不同的约定方式来强制调用,比如把stdcall的指针传递给一个需要cdecl的地方
你自己写的第三点跟栈没什么关系
☆─────────────────────────────────────☆
txmm (你被tx啦!) 于 (Sun May 22 20:55:49 2011) 提到:
只会前两个
☆─────────────────────────────────────☆
wodetiandi (啥也不写了~) 于 (Sun May 22 21:15:14 2011) 提到:
想方设法的创造值类型
☆─────────────────────────────────────☆
oscar (见光分解) 于 (Sun May 22 21:49:13 2011) 提到:
【 在 salooloo 的大作中提到: 】
: 问了个栈溢出的可能原因,至少举3个。
: 我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放
: 第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算?
: ...................
能说下题目全陈么?
☆─────────────────────────────────────☆
renne (歼灭天使 玲) 于 (Sun May 22 21:51:50 2011) 提到:
这个标题 ……有道笔试题………………
【 在 salooloo (salooloo) 的大作中提到: 】
: 问了个栈溢出的可能原因,至少举3个。
: 我想的是:1)申请了大容量的数组;2)用了递归,层次过深,使形参、局部变量不断压栈;3)while或其他死循环,只申请没释放
: 第三点应该不对,这明显bug了,其他还有什么呢,栈内存很小算不算?
: ...................
☆─────────────────────────────────────☆
Bluerainer (Blue) 于 (Sun May 22 23:47:24 2011) 提到:
局部变量过大。。。书上看的
☆─────────────────────────────────────☆
fentoyal (长风长歌) 于 (Mon May 23 08:01:33 2011) 提到:
【 在 rebirthatsix 的大作中提到: 】
: 对栈上的数组或者指针进行越界读写
: 使用与函数定义时不同的约定方式来强制调用,比如把stdcall的指针传递给一个需要cdecl的地方
: 你自己写的第三点跟栈没什么关系
: ...................
越界读写和栈溢出不一样吧?
☆─────────────────────────────────────☆
rebirthatsix (茫犭者-算法盲) 于 (Mon May 23 09:24:06 2011) 提到:
那看这个栈溢出怎么定义了,这个stack overflow的来源应该还是安全圈子吧
直接越界写栈空间,从而修改seh链结构或者函数返回地址,这是构造栈溢出最直接的方式
【 在 fentoyal 的大作中提到: 】
: : 对栈上的数组或者指针进行越界读写
: : 使用与函数定义时不同的约定方式来强制调用,比如把stdcall的指针传递给一个需要cdecl的地方
: : 你自己写的第三点跟栈没什么关系
: ...................
☆─────────────────────────────────────☆
rolan (迷途知返的羊) 于 (Mon May 23 15:53:15 2011) 提到:
在栈区使用“布局new”操作符
☆─────────────────────────────────────☆
fentoyal (长风长歌) 于 (Mon May 23 16:40:40 2011) 提到:
【 在 rolan 的大作中提到: 】
: 在栈区使用“布局new”操作符
: --
具体如何做呢?
☆─────────────────────────────────────☆
fentoyal (长风长歌) 于 (Mon May 23 16:41:28 2011) 提到:
【 在 rebirthatsix 的大作中提到: 】
: 那看这个栈溢出怎么定义了,这个stack overflow的来源应该还是安全圈子吧
: 直接越界写栈空间,从而修改seh链结构或者函数返回地址,这是构造栈溢出最直接的方式
: 【 在 fentoyal 的大作中提到: 】
: ...................
我觉着它这里指需求的栈空间大于系统能给予的
☆─────────────────────────────────────☆
shenlei (我爱果子|[路]|天山南北|潇湘隐士) 于 (Mon May 23 17:35:21 2011) 提到:
class c{};
char a[sizeofc];//栈空间
c* p=new(a) c;//在指定空间上new一个c的对象
【 在 fentoyal (长风长歌) 的大作中提到: 】
: 具体如何做呢?
☆─────────────────────────────────────☆
guitarfeng (czf) 于 (Tue May 24 00:03:01 2011) 提到:
动态分配内存和栈有M关系?
☆─────────────────────────────────────☆
ghxcst (西门吹风) 于 (Tue May 24 08:21:06 2011) 提到:
alloca 分配的内存在栈上
【 在 guitarfeng 的大作中提到: 】
: 动态分配内存和栈有M关系?
: --
☆─────────────────────────────────────☆
potatossss (薯仔) 于 (Tue May 24 08:48:54 2011) 提到:
不知道这个算不算:在一个只有固定大小的(极小,如内核栈)栈内使用了过多的自动变量
☆─────────────────────────────────────☆
datou06415 (大头先生) 于 (Tue May 24 09:06:45 2011) 提到:
更改系统默认的栈大小,把它改小了。
☆─────────────────────────────────────☆
chucai (一只眉) 于 (Tue May 24 10:10:57 2011) 提到:
数组越界
多线程操作时,访问同步资源
算不算?
☆─────────────────────────────────────☆
hyx () 于 (Tue May 24 10:35:17 2011) 提到:
求各种正解啊。
☆─────────────────────────────────────☆
fentoyal (长风长歌) 于 (Tue May 24 11:47:03 2011) 提到:
【 在 shenlei 的大作中提到: 】
: class c{};
: char a[sizeofc];//栈空间
: c* p=new(a) c;//在指定空间上new一个c的对象
: ...................
我是指如何让栈溢出
☆─────────────────────────────────────☆
LittleSun (小太阳) 于 (Tue May 24 15:20:53 2011) 提到:
还有种原因:使用非安全的函数,如strcpy()
☆─────────────────────────────────────☆
salooloo (salooloo) 于 (Tue May 24 17:33:06 2011) 提到:
呃 各种不懂 太深奥了
strcpy()也会造成栈内存溢出吗?
☆─────────────────────────────────────☆
dawnc (9527) 于 (Tue May 24 17:54:28 2011) 提到:
【 在 salooloo 的大作中提到: 】
: 呃 各种不懂 太深奥了
: strcpy()也会造成栈内存溢出吗?
: --
: ...................
char *a;
char *b="abc";
strcpy(a,b);
这样应该算吧
☆─────────────────────────────────────☆
xp2008 (boss) 于 (Tue May 24 21:13:52 2011) 提到:
这个不算,这个是未初始化的野指针。
【 在 dawnc 的大作中提到: 】
: : 呃 各种不懂 太深奥了
: : strcpy()也会造成栈内存溢出吗?
: : --
: ...................
☆─────────────────────────────────────☆
LittleSun (小太阳) 于 (Tue May 24 22:53:12 2011) 提到:
当dst所指的缓冲区长度小于src时,就会缓冲区溢出。因为strcpy只有两个参数,没有检查长度。strcpy_s()解决了该问题。
【 在 xp2008 的大作中提到: 】
: 这个不算,这个是未初始化的野指针。
: 【 在 dawnc 的大作中提到: 】
: : : 呃 各种不懂 太深奥了
: ...................
这是一条镜像帖。来源:北邮人论坛 / cpp / #53292同步于 2011/6/7
CPP机器人发帖
[合集] (有道笔试题)栈溢出的原因
shenlei
2011/6/7镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。