C-如何限制堆中的地址访问?

C-如何限制堆中的地址访问?,c,pointers,static,heap,C,Pointers,Static,Heap,对于存储在堆栈中的变量,我们可以使用static来避免从其他文件访问。有没有办法避免其他文件的指针访问特定地址?首先,为了避免问题的发生,静态变量从不在堆栈上分配,因为它们本质上是全局变量,它们不会污染全局名称空间。获取指向静态变量的指针并对其进行更改很简单,静态是编译器强制执行的构造 回到实际问题上来,不,您不能直接检查内存访问。你怎么知道你正在访问的内存是否有效?不过,你可以做一些事情。例如,您可以使用自己的内存管理函数包装malloc和free,并跟踪分配和释放的内存以及元数据。然后,您可

对于存储在堆栈中的变量,我们可以使用
static
来避免从其他文件访问。有没有办法避免其他文件的指针访问特定地址?

首先,为了避免问题的发生,静态变量从不在堆栈上分配,因为它们本质上是全局变量,它们不会污染全局名称空间。获取指向静态变量的指针并对其进行更改很简单,静态是编译器强制执行的构造


回到实际问题上来,不,您不能直接检查内存访问。你怎么知道你正在访问的内存是否有效?不过,你可以做一些事情。例如,您可以使用自己的内存管理函数包装malloc和free,并跟踪分配和释放的内存以及元数据。然后,您可以使用另一个包装器函数来处理指针解引用,并根据需要检查元数据。如果您愿意,您仍然可以使用原始指针来进行破坏,因此这实际上并不多。

即使使用
static
它仍然可以通过指针从其他文件访问:)为什么您仍然需要限制它?尽可能缩小变量的范围,如果不希望从其他地方访问它,就不要传递它。也许只为它们提供一个指向常量的指针。静态函数不能直接从其他编译UTIT中看到。但是如果他们有一个指向该区域的指针,他们可以从该位置读/写或调用该函数。我正在编写一个实现,希望程序在其他文件意外访问某些特定内存时抛出类似错误的东西。这样调试起来就更容易了@P.P.您必须解决的第一个问题是,这样的系统如何知道什么是对内存的正确访问,什么不是对内存的正确访问。@YiLinLiu,对于访问其他文件中定义的另一个变量,您的代码中没有任何异常。定义变量的文件在程序的链接阶段丢失,您无法限制对自己内存的访问(操作系统无法帮助您区分对进程本身任何虚拟地址的访问)