C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で整数のオーバーフローをチェックします


安全な唯一の方法は、オーバーフローが発生する前にオーバーフローをチェックすることです。ただし、整数のオーバーフローをチェックするためのハッキーな方法がいくつかあります。したがって、unsigned int加算でオーバーフローを検出することを目的としている場合は、結果が実際に加算された値よりも小さいかどうかを確認できます。たとえば、

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // Alternatively "value < y" should also work

これは、xとyが両方ともunsigned intである場合、それらを追加してオーバーフローした場合、ラップアラウンドして先に進むには、可能な最大unsigned intよりも大きくする必要があるため、それらの値をどちらよりも大きくすることはできないためです。これらの値の。

もう1つの方法は、CPUのオーバーフローフラグにアクセスしてみることです。一部のコンパイラは、テストできるアクセスを提供しますが、これは標準ではありません。


  1. C++のバイナリツリーで子の合計プロパティを確認します

    二分木があるとします。二分木は、次の特性を満たす場合に有効です。 各ノードには、左右の子の値の合計と同じデータ値が含まれている必要があります。いずれかの側に子がない場合は、0として扱われます。 以下のように、指定されたプロパティを満たすツリーが存在するとします。 これをチェックするそのようなトリックはありません。ノードとその子の両方がプロパティを満たしている場合はツリーを再帰的にトラバースする必要があり、それ以外の場合はfalseを返します。 例 #include <iostream> using namespace std; class node {  

  2. SigCheckを使用して、危険な証明書または署名されていない証明書を確認します

    SuperFishまたはeDellRootを覚えている人もいるかもしれません。それらは、ユーザーの知らないうちにユーザーのコンピューターにインストールされた安全でないルート証明書でした。ほとんどのマルウェア対策ツールは不正な証明書の識別と削除に長けていますが、RCCルート証明書スキャナーなどの一部のツールは、Windowsコンピューターから危険なルート証明書を削除することに重点を置いています。 SysInternals SigCheck Microsoftのツールは、危険で署名されていない証明書をスキャンしてチェックすることを許可しない別のツールです。それでも、VirusTotalを使用し