Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số cột sẽ bị xóa để sắp xếp từng hàng trong C ++

Các hành vi bất thường của các chương trình C ++ thường dẫn đến sự cố chương trình. Bạn có thể đã gặp phải các sự cố như lỗi Phân đoạn, Bị hủy bỏ, Ngoại lệ dấu chấm động, v.v. Tiếp theo là các chương trình mẫu có thể giúp bạn hiểu lý do gây ra sự cố chương trình C ++.

Ngoại lệ

Các ngoại lệ trong C ++ là các phản hồi của một chương trình khi nó gặp một điều kiện bất thường. Chương trình bị treo do các ngoại lệ như vậy nếu chúng không được xử lý đúng cách bằng cách sử dụng các khối try-catch. Các sự cố chương trình sau do ngoại lệ chia cho 0 -

Ví dụ

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

Đầu ra

Floating point exception (core dumped)

Tràn bộ đệm

Bộ đệm là một khu vực lưu trữ tạm thời. Khi một chương trình trong khi ghi dữ liệu vào bộ đệm vượt quá kích thước mà bộ đệm có thể chứa, thì dữ liệu bổ sung sẽ vượt ra ngoài ranh giới của bộ đệm. Dữ liệu ghi đè lên các vị trí bộ nhớ liền kề. Chương trình sau thay đổi hành vi của nó khi đầu vào vượt quá kích thước, biến num có thể giữ.

Ví dụ

#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;
}

Đầu ra

Value for num:100
Segmentation fault (core dumped)

Tràn ngăn xếp

Sự cố Tràn ngăn xếp xảy ra khi con trỏ ngăn xếp cuộc gọi vượt quá giới hạn ngăn xếp. Ngăn xếp bao gồm một lượng không gian giới hạn. Khi một chương trình sử dụng nhiều dung lượng hơn khả dụng trên ngăn xếp thì ngăn xếp được cho là tràn và gây ra sự cố chương trình. Nguyên nhân phổ biến nhất là đệ quy vô hạn.

Chương trình sau đây chứa vô số lời gọi đến hàm giai thừa (). Câu lệnh trả về không phù hợp trong trường hợp này.

Ví dụ

#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;
}

Đầu ra

Segmentation fault (core dumped)

Lỗi phân đoạn

Lỗi phân đoạn hoặc kết xuất lõi xảy ra khi một chương trình cố gắng truy cập vào các vị trí bộ nhớ không thuộc về nó. Trong chương trình sau, stris con trỏ tăng dần và bổ sung bộ nhớ vô thời hạn.

Ví dụ

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

Đầu ra

Segmentation fault (core dumped)

Rò rỉ bộ nhớ

Rò rỉ bộ nhớ xảy ra khi bộ nhớ được cấp phát động không bao giờ được phân bổ. Bộ nhớ phải được giải phóng khi nó không còn được sử dụng. Nếu chúng ta liên tục cấp phát bộ nhớ lặp đi lặp lại, thì những rò rỉ bộ nhớ này theo thời gian sẽ tăng lên và cuối cùng sẽ gây ra sự cố chương trình. Việc lặp lại mã kém như dưới đây gây ra rò rỉ bộ nhớ -

Ví dụ

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