C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 什么架构计算无效指针不安全?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_675_1@
int* a = new int[5] - 1;

该行本身根据C标准调用未定义的行为,因为a是无效的指针,而不是一个过去的结束.同时,这是一个零开销的方式,使一个基于1的数组(第一个元素是[1]),我需要一个project of mine.

我想知道这是否是我需要避免的事情,或者如果C标准只是保守地支持一些奇怪的架构,我的代码永远不会运行.所以问题是,什么架构这将是一个问题?其中有哪些普遍存在?

编辑:看到上面的行确实调用未定义的行为,看看this question.

编辑:Dennis Zickefoose指出,当调用未定义的行为时,编译器被允许执行任何操作,因此编译器和cpu都必须提供超出C标准的保证,以便这样的代码工作.我正在扩大问题,即现代C编译器是否有这个问题.

解决方法

用于执行检查的硬件存在于所有x86处理器中,我们目前还没有在最流行的操作系统中使用它.

如果您使用分段存储器架构,我们对16位系统进行了分配,则分配不太可能返回地址段:0.在这种情况下,您无法从该地址中减去任何东西!

这是阅读关于分段内存的原因,为什么加载无效的段是不可能的

http://en.wikipedia.org/wiki/Segment_descriptor

你必须决定这不可能发生在你的代码,或者你可能定义一个重载的操作符[]来处理你的偏移量.

大佬总结

以上是大佬教程为你收集整理的c – 什么架构计算无效指针不安全?全部内容,希望文章能够帮你解决c – 什么架构计算无效指针不安全?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。