写入的字符数多于 malloc 的字符数。为什么它不失败?

2024-01-25

为什么以下工作有效并且不会抛出某种分段错误?

char *path = "/usr/bin/";
char *random = "012";

// path + random + \0
// so its malloc(13), but I get 16 bytes due to memory alignment (im on 32bit)
newPath = (char *) malloc(strlen(path) + strlen(random) + 1);

strcat(newPath, path);
strcat(newPath, "random");
// newPath is now: "/usr/bin/012\0" which makes 13 characters.

但是,如果我添加

strcat(newPath, "RANDOMBUNNIES");

这个调用不应该失败吗,因为 strcat 使用的内存多于分配的内存?因此,不应该

free(newPath)

也失败,因为它尝试释放 16 个字节,但我使用了 26 个字节(“/usr/bin/012RANDOMBUNNIES\0”)?

提前非常感谢!


大多数情况下,这种超限问题不会使您的程序在烟雾和烧焦的硫磺味中爆炸。更微妙的是:在溢出变量之后分配的变量将被更改,从而导致程序稍后出现无法解释且看似随机的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

写入的字符数多于 malloc 的字符数。为什么它不失败? 的相关文章

随机推荐