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

削除する列をカウントして、各行をC++でソートします


C ++プログラムの異常な動作は、多くの場合、プログラムのクラッシュにつながります。セグメンテーション違反、中止、浮動小数点例外などの問題が発生した可能性があります。以下は、C++プログラムのクラッシュの理由を理解するのに役立つサンプルプログラムです。

例外

C ++の例外は、プログラムが異常な状態に遭遇したときのプログラムの応答です。 try-catchブロックを使用して適切に処理されない場合、このような例外が原因でプログラムがクラッシュします。ゼロ除算例外が原因で次のプログラムがクラッシュする-

#include <iostream>
int main(){
   int num1=10;
   int num2=0;
   int quotient=num1/num2;
   printf("\n Quotient is: %d",quotient);
   return 0;
}

出力

Floating point exception (core dumped)

バッファオーバーフロー

バッファは一時的なストレージ領域です。バッファにデータを書き込んでいるときにプログラムがバッファが保持できるサイズを超えると、余分なデータがバッファの境界から外れます。データは隣接するメモリ位置に上書きされます。次のプログラムは、入力がサイズを超えると動作を変更します。変数numは保持できます。

#include <iostream>
#include <string.h>
int main(){
   int num=100;
   std::cout<<"\nValue for num:"<<num;
   char c[2];
   strcpy(c,"abcdefghijklmnopqrstuvwxyz");
   std::cout<<"\nValue for c:"<<c;
   return 0;
}

出力

Value for num:100
Segmentation fault (core dumped)

スタックオーバーフロー

スタックオーバーフローの問題は、呼び出しスタックポインタがスタック境界を超えたときに発生します。スタックは限られたスペースで構成されています。プログラムがスタックで使用可能なスペースよりも多くのスペースを使用すると、スタックがオーバーフローし、プログラムがクラッシュすると言われます。最も一般的な原因は無限再帰です。

次のプログラムには、関数factorial()への無限の呼び出しが含まれています。この場合、returnステートメントは適切ではありません。

#include <iostream>
#include <string.h>
int factorial(int num){
   if(num==0)
      return 1;
   else
      return(factorial(num));
}
int main(){
    int n=10;
   int fact=factorial(n);
   std::cout<<fact;
}

出力

Segmentation fault (core dumped)

セグメンテーション違反

セグメンテーション違反またはコアダンプは、プログラムがそれに属していないメモリ位置にアクセスしようとしたときに発生します。次のプログラムでは、ポインタstrisがメモリを無期限にインクリメントおよび追加します。

#include <iostream>
int main(){
   char *str;
   char name[]="iostream";
   str=name;
   while(1)
      (*str++)='a';
}

出力

Segmentation fault (core dumped)

メモリリーク

メモリリークは、動的に割り当てられたメモリが割り当て解除されない場合に発生します。メモリは、使用されなくなったときに解放する必要があります。何度も何度もメモリを割り当て続けると、時間の経過とともにこれらのメモリリークが増加し、最終的にプログラムがクラッシュします。以下のような貧弱なコードを繰り返すと、メモリリークが発生します-

#include <iostream>
int main(){
    int *node;
   node = (int *) malloc(9999999);
   // free(node);
}

  1. Cプログラムの指定された行列のゼロの数でソートされた列のインデックスを出力します。

    サイズNxMの配列が与えられ、N行数とM列数であり、タスクは、任意の列に存在するゼロの数に基づいてソート操作を実行した後、対応する行列のすべての列のゼロの数を出力することです。 たとえば、1番目の st 列には1つのゼロと2つのndが含まれます 列にゼロと3番目のrdが含まれていません 列に2つのゼロが含まれている場合、結果は− 312になります。 例 Input:    0 0 0    1 1 1    1 0 1 Output: 1 3 2 説明 注 −マトリックスはインデックス1から開始したと見なされます。 例

  2. サイズdで作成できる十二角形の数をカウントするC++プログラム

    数dがあるとします。正方形のタイルと辺の長さが1の通常の三角形のタイルが無数にあると考えてください。これらのタイルを使用して、側面dの通常の十二角形(12辺の多角形)を形成できる方法をいくつ見つける必要があります。答えが大きすぎる場合は、結果mod998244353を返します。 ステップ これを解決するために、次の手順に従います- b := floor of d/2 - 1 c := 1 for initialize i := 2, when i < d, update (increase i by 1), do:    b := b * (floor of