2009-07-26 41 views
17

là gì khi chạy chương trình của tôi, tôi nhận được lỗi này:ý nghĩa của C++ Lỗi std :: length_error

terminate called after throwing an instance of 'std::length_error' 
    what(): basic_string::_S_create 
Abort trap 

Tôi biết rằng bạn không thể làm được gì nhiều mà không cần mã nhưng tôi nghĩ rằng lỗi này là quá sâu trong mã để sao chép tất cả. Có lẽ tôi có thể hình dung ra nếu tôi hiểu ý nghĩa của lỗi này. Đây có phải là dấu hiệu cho sự cố khi đọc hoặc viết sai địa chỉ bộ nhớ không?

Có điều gì tôi có thể làm để có thêm thông tin về sự cố từ chương trình của tôi không?

+0

Bạn có thể đăng một số đoạn mã mà bạn đang truy cập vào chuỗi không? –

+1

Chuỗi không phải là vấn đề. Sau một số thay đổi nhỏ và thêm thông báo gỡ lỗi tôi nhận được một segfault thực;) – Janusz

+1

Ngoài câu trả lời của Kevin: Có lẽ bạn đã thực hiện một số tính toán có thể dẫn đến độ dài chuỗi âm? Bởi vì độ dài chuỗi là (bình thường) được lưu trữ như một giá trị không dấu, giá trị âm của bạn sẽ dẫn đến một giá trị cực dương lớn, chủ yếu là lớn hơn std :: string :: max_size()! – mmmmmmmm

Trả lời

20

Điều đó có nghĩa là bạn đã cố gắng tạo chuỗi lớn hơn tiêu chuẩn :: string :: max_size().

http://msdn.microsoft.com/en-us/library/as4axahk(VS.80).aspx

An exception of type length_error Class is thrown when an operation produces a string with a length greater than the maximum size.

+2

Có thể điều đó cũng có nghĩa là chuỗi của tôi không còn trong bộ nhớ nữa và tôi đang đọc rác ngẫu nhiên từ bộ nhớ cho đến khi chuỗi quá lớn? – Janusz

+14

Bạn có thể tạo tình huống này một cách tai nạn bằng cách cố gắng tạo chuỗi có kích thước -1. Kích thước chuỗi không được ký, vì vậy -1 thực sự là số nguyên không dấu lớn nhất có thể. – MSalters

0

Đây là một lỗi trong chế độ gỡ lỗi với VS2005. Khi tôi thay đổi nó sang chế độ phát hành, mọi thứ đều hoạt động.

Vâng, thời gian chạy gỡ lỗi vc gây ra điều này, đó là tất cả.

+4

Chào mừng bạn đến với StackOverflow và cảm ơn bạn đã đăng bài. Vui lòng xem [Cách trả lời] (http://stackoverflow.com/questions/how-to-answer). –

+0

Chuyển từ Debug sang Release cũng hoạt động với tôi, nhưng trong VS2008 64 bit. Nó đã bị treo khi tôi trình gỡ lỗi đã nhấn một dòng tạo ra một đối tượng ma trận rất lớn. Tôi đoán nó đã cố gắng để phân bổ đủ không gian để hiển thị ma trận như là một chuỗi và kết thúc lên đâm nó. – partofthething

1

Tôi biết đây là câu hỏi cũ nhưng tôi chỉ gặp sự cố tương tự. Sử dụng Linux với gcc.

Việc tháo rời chức năng cho thấy nhiều bước nhảy trong mã, trong đó ngoại lệ được ném, không nên có ở đó. Cuối cùng, một Xây dựng Sạch sẽ giải quyết vấn đề cho tôi.

Các vấn đề liên quan