【发布时间】:2014-06-26 12:27:42
【问题描述】:
为什么我可以增加指针以读取超过分配变量的长度,而操作系统不会阻止我?当然,既然它是为整数留出 4 个字节,它应该知道它不应该允许任何指针经过这 4 个字节?
事实上,当我增加一个指针超过分配的变量字节时,我到底在读什么/那些相邻的内存位置?而且由于每个程序都应该有自己的“地址空间”,我不能在没有段错误的情况下在那个“地址空间”内做任何我想做的事情吗?如果每个程序都有自己的“地址空间”,应该不可能读取属于其他程序的内存吧?
【问题讨论】:
-
然后使用内存管理框架,如 .NET 或 Java。 C 不是为此而构建的。
-
这对 SO 来说不是一个好问题,很可能会被关闭。但幸运的是,我昨天在我的博客上回答了你的问题。 ericlippert.com/2014/05/07/why-does-my-code-not-crash
-
顺便说一句,您的错误在于“肯定是因为它是预留四个字节的那个”......它不是预留的操作系统四个字节。操作系统留出 4000 字节 并且 malloc 决定使用其中的四个作为整数。我经常注意到“肯定”这个词表明错误在哪里。
-
另请参阅有关相关情况的此问题:访问不再有效的内存:stackoverflow.com/questions/6441218/…