进程的地址空间中未使用的内存是否仅受到读取权限的保护,因此写入单位指针指向的位置总是会导致页面错误被 *** 作系统捕获?或者不是这种情况,并且除了代码之外的每个存储器位置(哪个都是只读访问权限)都被赋予写访问权限?
我问这个是因为我的朋友正在向我展示他的代码,他没有初始化指针并在其指向的内存中写入,但他的程序仍然没有崩溃与mingw gcc编译器的Windows但总是崩溃与visual c,在mac或linux中.
我认为 *** 作系统不保护未使用区域的内存,并且导致崩溃,因为在mingw生成的代码中,随机指针值指向某些使用区域,如堆栈,堆或代码,而在其他它指向一些自由区域.但是,如果 *** 作系统真的不能保护未使用的区域,那么这些类型的错误,例如未初始化的指针是否难以调试?
我想这就是为什么建议在调用delete或free之后总是给指针赋值NulL,这样当用它访问某些东西时,它确实会导致可见的崩溃.
最佳答案这取决于 *** 作系统的实现.在某些配置中,例如,ExecShield将保护超出程序范围的大部分内存,并且通常要保护数据段的前几个字节(用NulL指针发信号访问),但可能是指针实际指向程序中有效的任意内存地址. 总结以上是内存溢出为你收集整理的地址空间中未使用的内存是否受保护全部内容,希望文章能够帮你解决地址空间中未使用的内存是否受保护所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)