2014-02-08 42 views
0

在C++程序中是否有任何方法來檢查一個變量的聲明是否沒有適當的資源?有時候這樣的檢查很重要。(C++)如何檢查變量是否有資源?

例如:

int i=0;通常會工作,但如果系統沒有資源,它(RAM /等),它會失敗/段錯誤的/ etc。

int *i;同樣會在這種情況下失敗,所以new我不認爲會是一個解決方案。

+3

如果你沒有連得4個字節留在無論如何,你可以做的不多。你甚至無法調用'退出'或者展開堆棧。 – delnan

+2

自動分配「int」將失敗的唯一時間是當您用完堆棧。這基本上是一個關於[如何避免]的問題(http://stackoverflow.com/questions/12146201/how-to-handle-or-avoid-a-stack-overflow-in-c)。 – jrok

+0

我原以爲'exit'會是或多或少的一個'pop()'類型的命令,不需要'push()'。 – ConfusedStack

回答

1

這時候可變進入範圍或初始化(它的「小」更難,因爲編譯器將優化變量到寄存器重用內存等) 處理內存錯誤發生的時候是標準的方式「檢查」執行。隨着操作系統處理堆棧增長以及可用於應用程序的內存 - 「原子」操作是必需的。 假設情景 -


b)上下文切換髮生,其他一些其他應用帶走所有珍貴的記憶
C)你的應用程序試圖採取空間,已經在應用b的髒手)

  • 堆棧變量會產生堆棧溢出錯誤
    堆棧溢出錯誤不是st然後發生了變化。在Windows中可以找到堆棧溢出與__try __except塊

  • 新的分配將產生bad_alloc的(或稱新的處理程序)堆變量例外
    如果要處理這些案件只是趕上拋出的異常?使用C函數分配

  • 堆變量將返回null
    因此,檢查它們的返回值