Cでのヒープオーバーフローとスタックオーバーフロー
ヒープオーバーフロー
ヒープは、動的変数を格納するために使用されます。これは、プロセスのメモリの領域です。 malloc()、calloc()、resize()これらの組み込み関数はすべて、通常、動的変数を格納するために使用されます。
ヒープオーバーフローは、-
のときに発生しますA)動的に多数の変数を割り当てる場合-
int main() { float *ptr = (int *)malloc(sizeof(float)*1000000.0)); }
B)メモリを継続的に割り当て、使用後に解放しない場合。
int main() { for (int i=0; i<100000000000; i++) { int *p = (int *)malloc(sizeof(int)); } }
スタックオーバーフロー
スタックは後入れ先出しのデータ構造です。関数内で使用されるローカル変数を格納するために使用されます。パラメータは、この関数とそのリターンアドレスを介して渡されます。
プログラムがより多くのメモリスペースを消費する場合、コンピュータメモリのスタックサイズが制限されているため、スタックオーバーフローが発生します。
スタックオーバーフローは、-
のときに発生しますC)関数がそれ自体で無限に再帰的に呼び出されると、スタックは多数のローカル変数を格納できなくなるため、スタックオーバーフローが発生します-
void calculate(int a) { if (a== 0) return; a = 6; calculate(a); } int main() { int a = 5; calculate(a); }
D)多数のローカル変数を宣言したり、大きな次元の配列や行列を宣言したりすると、スタックオーバーフローが発生する可能性があります。
int main() { A[20000][20000] }
-
長方形の面積と周囲長のためのCプログラム
長方形の長さと幅を考えると、その面積と周囲長を見つける必要があります。 長方形は、4つの辺とそれぞれ90度の4つの角度を含む2D図形です。長方形のすべての辺が等しいわけではなく、長方形の反対側だけが等しいだけです。長方形の対角線も同じ長さです。 以下は長方形の図式表現です。 ここで、Aは長方形の幅を表し、Bは長方形の長さを表します。 エリアを見つけるには 長方形の式は次のとおりです。長さx幅 また、長方形の周囲長は− 2 x(長さ+幅) 。 例 Input: 20 30 Output: area of rectangle is : 600 peri
-
C++で重複する円と長方形
(radius、xc、yc)として表される円があると仮定します。ここで、(xc、yc)は円の中心座標です。また、(x1、y1、x2、y2)として表される軸に沿った長方形があります。ここで、(x1、y1)は左下隅の座標であり、(x2、y2)は右上隅の座標です。長方形の角。円と長方形が重なっていないか確認する必要があります。 したがって、入力が次のような場合 そうすれば、出力は真になります。 これを解決するには、次の手順に従います- 関数eval()を定義します。これには、a、b、c、が必要です。 bの最大値とaとcの最小値を返します メインの方法から、次のようにしま