(c ++)如何检查变量是否有资源?

时间:2014-02-08 13:56:39

标签: c++ memory-management resources

在C ++程序中有没有办法检查变量的声明是否没有适当的资源?有时这种检查很重要。

示例:

int i=0;通常可以正常工作,但如果系统没有资源(RAM / etc),它将失败/ segfault /等。

在这种情况下,

int *i;同样会失败,所以new我认为不会是一个解决方案。

1 个答案:

答案 0 :(得分:1)

当变量进入范围或被初始化时执行此“检查”(由于编译器将变量优化为寄存器重用内存等,因此“更小”更难) 处理内存错误是标准方法。随着操作系统处理堆栈增长和应用程序可用的内存 - 需要“原子”操作。 假设情景 -

a)你的应用程序检查堆栈上是否有足够的空间,操作系统告诉你继续,我仍然有一些真实内存页面...
b)发生上下文切换,其他一些app消除了所有宝贵的记忆 c)你的应用程序试图占用已经在应用程序b)的脏手中的空间

  • 堆栈变量将产生堆栈溢出错误
    但是,堆栈溢出错误并不是标准化的。在Windows上,您可以找到带有__try __except块的堆栈溢出

  • 用new分配的堆变量将产生bad_alloc(或调用新的处理程序)异常
    如果你想处理这些情况,只需捕获异常抛出...

  • 使用C函数分配的堆变量将返回null
    所以检查他们的返回值
相关问题