为什么我可以信任内存分配?

dar*_*nak 4 c memory malloc free memory-management

我目前正在学习使用C语言的CS课程.我的教科书似乎暗示指针变量仍保留以前分配给它的内存地址,即使在调用free()之后 - 假设我以前使用过malloc( ).这是否意味着当调用malloc()时,内存的某些部分会被"锁定",因此我的指针数据保持不变?什么阻止其他进程 - 比如谷歌浏览器或某些应用程序 - 搞乱我的变量?我可以轻松地在无效索引处为数组赋值,从而导致事情中断.我也可以不正确地访问内存,再次使用无效索引的数组,给我垃圾,或者,如果我真的很幸运,给我一个有意义的值.什么阻止计算机陷入混乱!

das*_*ght 6

指针变量仍然保存先前分配给它的内存的地址,即使在free()调用它之后也是如此

这是真的.这种情况被称为"悬空指针".你的程序不允许使用这些指针; 否则,其行为未定义.

这是否意味着当调用malloc()时,内存的某些部分会被"锁定",因此我的指针数据保持不变?

只有在malloc不再将分配范围返回到程序的意义上,它们才会被锁定,直到free它为止.但是没有内置保护:如果您的程序意外写入释放的指针,它可能会覆盖合法变量中的数据,从而导致在没有适当工具的情况下很难捕获的错误.

什么阻止其他进程 - 比如谷歌浏览器或某些应用程序 - 搞乱我的变量?

其他应用程序在不同的内存空间中运行的事实.硬件和操作系统可确保其他进程被锁定在程序的内存空间中.