在使用strcpy时并没有发生溢出怎么回事
我使用的是code::blocks 洛城闻笛 发表于 2018-8-1 21:04有点晕,比如我现在是17字节,64位的机子,最近的8的整数是24,最近2的幂是2^5=32且能被8整除,那么按照 ...
对了,我刚刚查了下资料,应该不是内存对齐的问题,是你很幸运没有访问非法,有时候越界一点点是没事的。 本帖最后由 无符号整形 于 2018-8-2 08:16 编辑
很幸运啊,老兄,内存对齐拯救了你!
"Original string\0" = 16字节
"New string\0" = 11字节,对齐4字节(即往上对齐到最近的2的幂,只不过这个幂要能被4整除)(32位默认4字节,64位默认8字节)对齐后=11+5=16字节
2018.8.2:应该是覆盖了栈中的数据。 无符号整形 发表于 2018-8-1 20:42
很幸运啊,老兄,内存对齐拯救了你!
"Original string\0" = 15字节,对齐4字节(即往上对齐到最 ...
谢谢,刚我试了下把 str1 加长了就出现了溢出.我想请问下字符串结束符 '\0' 在内存是不占空间吗,因为看你的 “original string\0"是15个字节算'\0'的话应该16啊,{:10_250:} 洛城闻笛 发表于 2018-8-1 20:51
谢谢,刚我试了下把 str1 加长了就出现了溢出.我想请问下字符串结束符 '\0' 在内存是不占空间吗,因为看 ...
哦哦对,我数错了,抱歉。。{:10_284:}
另外您可以采纳我的答案吗?被采纳是对我们回答者的肯定~ 无符号整形 发表于 2018-8-1 20:53
哦哦对,我数错了,抱歉。。
另外您可以采纳我的答案吗?被采纳是对我们回答者的肯定~
如果是64位机的话,那就是8字节的就近整数倍是吗。 洛城闻笛 发表于 2018-8-1 20:57
如果是64位机的话,那就是8字节的就近整数倍是吗。
嗯嗯,最少对齐8字节。
实测好像不是整数倍,是最接近的2的幂? 无符号整形 发表于 2018-8-1 21:00
嗯嗯,最少对齐8字节。
实测好像不是整数倍,是最接近的2的幂?
有点晕,比如我现在是17字节,64位的机子,最近的8的整数是24,最近2的幂是2^5=32且能被8整除,那么按照您的说法是 24字节还是32字节呢分配! 洛城闻笛 发表于 2018-8-1 21:04
有点晕,比如我现在是17字节,64位的机子,最近的8的整数是24,最近2的幂是2^5=32且能被8整除,那么按照 ...
不是这样啦,应该是16,64位的机子跑32位的程序相当于32位的机子跑32位的程序。
页:
[1]