Lỗi thời gian chạy C++

Sau hàng giờ nỗ lực thiết kế thuật toán và triển khai mã, điều tồi tệ nhất mà một lập trình viên có thể gặp phải là lỗi thời gian chạy. Thông thường, vào thời điểm chúng tôi viết mã xong và gửi vấn đề, chúng tôi đã cạn kiệt tinh thần đến mức nhìn thấy một lỗi thời gian chạy chỉ gợi lên một cảm xúc. “Tại sao lại là tôi”. Một lỗi thời gian chạy có thể có nghĩa là BẤT CỨ ĐIỀU GÌ và có khả năng là bạn phải đọc đi đọc lại toàn bộ mã để có thể tìm ra nguồn gốc của lỗi. Điều này có thể dẫn đến hàng giờ gỡ lỗi tẻ nhạt. Nhưng không còn nữa

Ở đây, chúng ta sẽ thảo luận về 6 lỗi thời gian chạy phổ biến nhất. Khi bạn đã quen thuộc với các loại lỗi khác nhau này, việc định vị chúng trong mã của bạn sẽ dễ dàng hơn nhiều và giảm 50% thời gian gỡ lỗi của bạn

  1. Chỉ mục vượt quá giới hạn/chỉ mục mảng âm — truy cập một chỉ mục chưa phải là một phần của mảng
#include 
#include
using namespace std;
int main[] {
// your code goes here
vector arr = vector[];

int n,sum = 0;
cin>>n;
for[int i=0;i>arr[i];
sum = sum+arr[i];
}
coutn;
vector arr = vector[n];

iii] Hoặc tăng kích thước của vectơ lên ​​1 lần mỗi khi bạn nhập dữ liệu vào

//remove already added elements from previous test cases
arr.clear[];
for[int i=0;i>temp;
arr.push_back[temp]; // creating a new[ith] elemen
sum = sum+arr[i];
}

Cách cuối cùng có thể gây rắc rối không lường trước nếu bạn không cẩn thận [ e. g. trong các vấn đề có nhiều trường hợp thử nghiệm, bạn có thể thêm đầu vào của trường hợp thử nghiệm mới vào sau đầu vào của trường hợp thử nghiệm trước đó]. Hãy chắc chắn rằng bạn xóa véc tơ của mình cho mọi trường hợp thử nghiệm

GHI CHÚ. Trong C++, nếu bạn đang sử dụng vectơ, mảng. at[i] an toàn hơn nhiều khi sử dụng. mảng[i] có thể không đưa ra lỗi thời gian chạy và có thể mang lại cho bạn kết quả không mong muốn khi tôi vượt quá giới hạn và khiến việc gỡ lỗi trở nên cực kỳ khó khăn

2. Khai báo một mảng rất lớn/yêu cầu một lượng lớn bộ nhớ

int size = 1e7;int arr[size]; //array of 1e7 size

Nếu chương trình cố gắng yêu cầu bộ nhớ nhiều hơn giới hạn bộ nhớ tối đa cho chương trình, nó sẽ gây ra lỗi thời gian chạy. Giới hạn có thể khác nhau tùy thuộc vào nền tảng hoặc đối với các sự cố khác nhau.
Thông thường, kích thước tối đa của mảng int mà bạn có thể khai báo nằm trong khoảng 10⁶-10⁷

sửa chữa có thể

i. Xem nếu thay vì mảng int, bạn có thể sử dụng mảng ngắn/mảng bool

Điều đó có thể làm giảm không gian cần thiết đủ để tránh lỗi thời gian chạy

ii. Cố gắng giải quyết vấn đề mà không sử dụng một mảng lớn như vậy

Vấn đề được giải quyết bằng cách sử dụng ít bộ nhớ hơn bằng một số kỹ thuật khác. e. g. Thoạt nhìn, vấn đề sau từ codeforces có vẻ như có thể được giải quyết bằng cách sử dụng mảng, nhưng khi bạn thấy ràng buộc, bạn sẽ thấy kích thước của mảng 2D sẽ lớn hơn 10⁸. Nhưng vấn đề có thể giải quyết được ngay cả khi không sử dụng một mảng lớn như vậy

Vấn đề - 79B - Codeforces

Fox Ciel đã nhìn thấy một cánh đồng rộng lớn khi cô ấy đang ở trên xe buýt. Trường là một hình chữ nhật được chia thành các ô 1 × 1. Một số tế bào đã…

mật mã. com

3. Vi phạm giới hạn đệ quy/tràn ngăn xếp

Lấy ví dụ về một chương trình đơn giản để tìm giai thừa của bất kỳ số nguyên không âm nào

#include 
#include
using namespace std;
long long int factorial[long long int n]
{
if[n==1]
return 1;
long long int x = factorial[n-1];
return n*x;
}
int main[] {
//cout

Chủ Đề